【发布时间】:2013-09-21 11:43:15
【问题描述】:
我的编译器是最新的 VC++ 2013 RC。
int f(bool b)
{
return {}; // OK
return b ? 1 : { }; // C2059: syntax error : '{'
return b ? 1 : {0}; // C2059: syntax error : '{'
return b ? {1} : {0}; // C2059: syntax error : '{'
}
为什么三元运算符中不能使用braced-init-list?
这种行为是否被 C++ 标准定义为格式错误,还是只是 VC++ 编译器的错误?
【问题讨论】:
-
{}不是表达式,这里检查语法Conditional operator differences betweenCandC++ -
据我所知,通过统一初始化应该可以做到
return b ? {0} : {1}。 -
@Rapptz,返回 b ? {0} : {1} 也被拒绝。
-
@xmllmx 是的,你是对的。它不适用于内置类型。
-
语法错误是由于
?:运算符而不是因为return,所以考虑条件运算符的语法。而表达式是“指定计算的一系列运算符和操作数”(这是 C++ 标准中给出的定义)
标签: c++ visual-c++ c++11 initialization ternary-operator