用户在C ++ 11中的条件中定义了显式转换

时间:2016-02-25 12:12:02

标签: c++11 type-conversion

我将用户定义的转换运算符定义为bool并在条件中使用它:

struct T {
  explicit operator bool() { return true; }
};

int main() {
   T t;
   return t ? 0 : 1;
}

令我惊讶的是,尽管explicit编译了(在gcc上)。这是否允许C ++ 11标准?我搜索了标准但却找不到它。

1 个答案:

答案 0 :(得分:3)

条件运算符的第一个操作数是上下文转换bool[expr.cond]/1)。其定义如下(引自N3337):

  

[conv]/3:出现在这样的上下文中的表达式e被称为从上下文转换为bool ,并且当且仅当声明时才是格式良好的对于某些人来说,bool t(e);格式正确   发明了临时变量t

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