C++ 为什么要隐式调用转换器构造函数?

标签 c++

为什么下面的代码调用了Child类的converter构造函数?

我的意思是,它通过 Child 转换器构造函数自动将 Base 转换为 Child。下面的代码编译,但它不应该编译因为我没有提供bool Child::operator!=(Base const&)吗?

class Base
{
};

class Child : public Base
{
public:
  Child() {}
  Child(Base const& base_) :
    Base(base_)
  {
    std::cout <<"should never called!";
  }
  bool operator!=(Child const&)
  {
    return true;
  }
};

void main()
{
  Base  base;
  Child child;

  if(child != base)
    std::cout << "not equal";
  else
    std::cout << "equal";
}

最佳答案

带有签名Child(Base const& base_) 的函数不是复制构造函数(右边的类型与左边​​的不同)。编译器可以隐式使用该构造函数将一种类型强制转换为另一种类型,以便您在 main 中进行比较。为防止此标记构造函数 explicit

关于C++ 为什么要隐式调用转换器构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2451214/

相关文章:

c++ - push_back 在增加容量之前推送元素?

c++ - 使用二维线程在CUDA中添加两个矩阵

c++ - 为什么结构化绑定(bind)将变量作为值而不是引用引入?

c++ - 存储抽象成员,保持接口(interface)简单

c++ - 二进制输入输出问题

c++ - 为同一行的多个声明赋值

c++ - 即使在显式调用析构函数后自动销毁对象

c++ - 从 C++ 推送 QML ChartView 更新

c++ - 在 C++ 中,判断两个字符串或二进制文件是否不同的最快方法是什么?

c++ - 马尔可夫随机场是否在 OpenCV 中实现?