2017-10-10 49 views
0

我最近偶然发现了一个接收单个指针参数的显式构造函数。我想知道在这种情况下是否需要明确的关键字?因为没有指针的构造函数,所以不能有任何隐式转换。C++显式构造函数,需要一个指针

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

为什么指针是任何其他构造函数的参数有什么不同? – juanchopanza

+2

是否需要“显式”是另一回事,与参数是指针无关。它与你想要允许的隐式转换有关。 – juanchopanza

回答

6

以下代码:

void f(Foo) {} 

int main() 
{ 
    int* p; 
    f(p); 
} 
  • 失败并explicit进行编译。

  • 高兴地编译没有它。

live example on godbolt.org