在MSVC v9.0上,如果我这样做:
int myvalue;
myvalue = true ? 1 : 0;
然后似乎在'='之前评估?:
。这是保证吗?我使用此表作为参考:
http://en.cppreference.com/w/cpp/language/operator_precedence
但是,两个运算符都在同一行,所以我不确定它们是否按照我期望的顺序进行评估,或者是否由标准保证。任何人都可以澄清这个吗?
答案 0 :(得分:7)
在本声明中
int myvalue = true ? 1 : 0;
只有一个运算符,即三元运算符。这里没有赋值运算符,所以优先级无关紧要。
不要将初始化与赋值混淆:
int myvalue;
myvalue = true ? 1 : 0; // now priorities are important
答案 1 :(得分:3)
从您的链接:
在给定方向上,使用相同的优先级评估位于同一单元格中的运算符(单元格中可能有多行运算符)。例如,表达式a = b = c被解析为a =(b = c),而不是(a = b)= c,因为从右到左的相关性。
由于=
和?:
都在同一个单元格中且具有从右到左的关联性,因此保证三元数首先进行评估。
答案 2 :(得分:0)
它们从右到左进行评估,因为它写在您链接的表格中。它相当于:
int myvalue = (true ? 1 : 0);
答案 3 :(得分:0)
从右到左:
int myValue1 = 20, myValue2 = 30;
myValue1 = true ? 1 : 0; // which is the same as:
myValue1 = ((true) ? (1) : (0));
// myValue == 1 && myValue2 == 30
true ? myValue1 : myValue2 = 5; // which is the same as:
(true) ? (myValue1) : ((myValue2) = (5));
// myValue == 1 && myValue2 == 30
false ? myValue1 : myValue2 = 5; // which is the same as:
(false) ? (myValue1) : ((myValue2) = (5));
// myValue == 1 && myValue2 == 5
这在C ++语言中得到了保证