小编Rud*_*ddy的帖子

c ++三元运算符

所以我遇到了一些有趣的东西,我没有意识到三元运算符(至少在Visual C++ 98-2010中).正如在http://msdn.microsoft.com/en-us/library/e4213hs1(VS.71).aspx中指出的那样,如果表达式和条件表达式都是l值,则结果是l值.

当然通常在c/c ++中你会写一些类似的东西:

int value = (x == 1) ? 1 : 0;

甚至从不关心r值/ l值的影响,在这种情况下,1和0都不能转换为l值.

但是,请采取以下措施:

int value = (x == 1) ? y : z;

y和z都是l值,它们,或者更准确地说,其中一个是三元运算符的实际结果(不是它的存储值),这不一定是显而易见的(至少我从来没有考虑过任何长度) ).

但是,这导致了编写以下内容的能力

(x == 1 ? y : z) = 99;

如果x = = 1,则将99分配给y,如果x!= 1,则将99分配给z

我从未见过在任何地方和我所读过的关于使用(或通常是否使用)三元运算符的所有讨论中所描述的内容.

当然,只有表达式和条件表达式都是l值时,它才有效

(x == 1 ? 0 : z) = 99;

无法编译,因为0是编译器愉快地指出的r值.

这只适用于包括括号的情况

x == 1 ? y : z = 99;

是完全不同的东西,只有当(x!= 1)并且美丽的部分是双方仍然是l值时才分配99到z所以有类似的东西(x == 1 ? y : z = 99) …

c++ conditional-operator visual-c++

8
推荐指数
1
解决办法
2400
查看次数

标签 统计

c++ ×1

conditional-operator ×1

visual-c++ ×1