为什么下面的方法有效?
#include <iostream>
using 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&
?
关于c++ - 将指针传递给 const ref 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34060755/