2017-10-10 2 views
0

Ich bin kürzlich über einen expliziten Konstruktor gestolpert, der ein einzelnes Zeigerargument empfängt. Ich frage mich, ob das explizite Schlüsselwort in diesem Fall notwendig ist? Da es für einen Zeiger keinen Konstruktor gibt, kann es keine implizite Konvertierung geben.C++ expliziter Konstruktor, der einen Zeiger nimmt

class Foo { 
public: 
    explicit Foo(int* int_ptr); 
} 
+3

Warum wäre ein Zeiger anders als alle anderen Konstruktorparameter? – juanchopanza

+2

Ob "explizit" notwendig ist, ist eine andere Sache und hat nichts damit zu tun, dass der Parameter ein Zeiger ist. Es hängt davon ab, welche impliziten Conversions Sie zulassen möchten. – juanchopanza

Antwort

6

Der folgende Code:

void f(Foo) {} 

int main() 
{ 
    int* p; 
    f(p); 
} 
  • schlägt mit explicit zu kompilieren.

  • Erfreulicherweise kompiliert ohne es.

live example on godbolt.org

Verwandte Themen