Jin*_*hen 12 c++ explicit type-conversion
我最近在学习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)?
son*_*yao 12
上下文转换是特殊的; 从C++ 11开始,explicit转换函数将在上下文转换中考虑.
(强调我的)
(自C++ 11以来)
在下面的上下文中,类型
bool是预期的,如果声明bool t(e);格式正确,则执行隐式转换(即,考虑显式转换函数,例如显式T :: operator bool()const;).据说这种表达e在上下文中被转换为bool.
- 控制表达式if,while,for;
- 内置逻辑运算符的操作数!,&&和||;
- 条件运算符的第一个操作数?:;
- static_assert声明中的谓词;
- noexcept说明符中的表达式;
- 表达式在显式说明符中; (自C++ 20起)
- 合同属性的谓词.(自C++ 20起)
这意味着if (b2),即使它被声明为,b2也将被bool隐式转换B::operator bool()为explicit.
| 归档时间: |
|
| 查看次数: |
584 次 |
| 最近记录: |