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

因此,上下文转换使用直接初始化规则,允许用户定义的
显式转换