为什么在下面的代码中调用了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)
带签名的函数Child(Base const& base_)
不是复制构造函数(右侧类型与左侧不同).编译器可以隐式使用该构造函数将一种类型强制转换为另一种类型,以便进行比较main
.为了防止这个标记构造函数explicit
.
归档时间: |
|
查看次数: |
308 次 |
最近记录: |