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

siv*_*udh 3 c++

为什么在下面的代码中调用了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";
}
Run Code Online (Sandbox Code Playgroud)

fbr*_*eto 6

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