为什么以下工作?
#includeusing namespace std; class PolyLine { public: PolyLine() = default; PolyLine(PolyLine * ptr) { std::cout << "Ctor called" << std::endl; } }; void function(const PolyLine& pt) { } int main() { PolyLine *pobj = new PolyLine(); function( pobj ); return 0; }
似乎隐式转换以某种方式被调用..为什么我没有得到编译错误?
它的工作原理是因为你正在调用隐式转换构造函数,因为当你将某些东西作为参数传递并且你有一个非显式构造函数接受一个参数时会发生这种情况.
如果您不希望在此实例中发生隐式转换,则可以将构造函数标记为explicit
:
explicit PolyLine(PolyLine * ptr) { std::cout << "Ctor called" << std::endl; }
也就是说,让构造函数获取指向同一个类的另一个对象的指针似乎有点奇怪; 为什么不用const PolyLine&
?