为什么下面的工作?

#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/

10-13 09:48