我的编译器是最新的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++编译器的错误?

最佳答案

好的,这是标准关于braced-init-list(8.5.3.1)的内容:



由于这里没有提到条件运算符,因此我猜您的编译器是正确的。还要注意,条件运算符期望在:(5.16)的两侧都有表达式,据我所知,大括号初始化器不是表达式。

关于c++ - 为什么不能在三元运算符中使用braced-init-list?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18843017/

10-08 22:37