C++11 C++;11
我将用户定义的转换运算符定义为C++11 C++;11,c++11,type-conversion,C++11,Type Conversion,我将用户定义的转换运算符定义为bool,并在条件中使用它: struct T { explicit operator bool() { return true; } }; int main() { T t; return t ? 0 : 1; } 令我惊讶的是,尽管有显式的,(在gcc上)它仍然可以编译。这是C++11标准允许的吗?我搜索了标准,但找不到它。条件运算符的第一个操作数在上下文中转换为bool([expr.cond]/1)。其定义如下(引用N3337): [con
bool
,并在条件中使用它:
struct T {
explicit operator bool() { return true; }
};
int main() {
T t;
return t ? 0 : 1;
}
令我惊讶的是,尽管有显式的
,(在gcc上)它仍然可以编译。这是C++11标准允许的吗?我搜索了标准,但找不到它。条件运算符的第一个操作数在上下文中转换为bool
([expr.cond]/1
)。其定义如下(引用N3337):
[conv]/3:
出现在这种上下文中的表达式e
被称为上下文转换为bool
,并且当且仅当声明bool t(e)时,该表达式是格式良好的对于某些情况,代码>格式良好
发明了临时变量t
因此,上下文转换使用直接初始化规则,允许用户定义的显式转换