我最近在学习C++,我注意到了一个关于cppreference的例子,其中一部分是这样的:
struct B
{
explicit B(int) { }
explicit operator bool() const { return true; }
};
int main()
{
B b2(2); // OK: direct-initialization selects B::B(int)
if (b2) ; // OK: B::operator bool()
}
Run Code Online (Sandbox Code Playgroud)
隐式转换的介绍告诉我"当表达式在if语句或循环中使用时",此表达式(b2)的结果将被bool隐式转换为类型.
此外,显式说明符的介绍告诉我"转换函数是否显式,它不能用于隐式转换".
由于b2将被隐式if(b2)转换,并且转换函数是explicit,怎么回事if(b2)?