C++ 使用引用参数的构造函数的显式修饰符

C++ 使用引用参数的构造函数的显式修饰符,c++,implicit-conversion,explicit,C++,Implicit Conversion,Explicit,我读到,为了避免隐式转换,定义单参数构造函数explicit是一个很好的实践。我理解将int值提升为类对象的陷阱。我想知道它是否也适用于接受引用类型的构造函数。在这种情况下,如何激发隐式转换: class Foo { public: Foo(Bar& bar) { } }; 如果构造函数接受指针,情况是否会改变,是否可以从NULL和NULL ptr进行转换 class Foo { public: Foo(Bar* bar) { } }; 两人都同意。带签名的函数 vo

我读到,为了避免隐式转换,定义单参数构造函数
explicit
是一个很好的实践。我理解将int值提升为类对象的陷阱。我想知道它是否也适用于接受引用类型的构造函数。在这种情况下,如何激发隐式转换:

class Foo
{
public:
    Foo(Bar& bar) { }
};
如果构造函数接受指针,情况是否会改变,是否可以从
NULL
NULL ptr
进行转换

class Foo
{
public:
    Foo(Bar* bar) { }
};

两人都同意。带签名的函数

void acceptFoo(const Foo& foo)
如果您在那里传递一个
,将使编译器创建一个
Foo

0
nullptr
相同