为什么下面的工作?
#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/