在C++运算符中?:如果第二个和第三个参数是相同类型的左值,则可以是左值,例如:
int foo = 0, bar = 1;
bool condition = true;
(condition ? foo : bar) = 42; // correct
Run Code Online (Sandbox Code Playgroud)
还可以在此运算符中抛出一些内容:
bar = (condition ? foo : throw 42); // still correct
Run Code Online (Sandbox Code Playgroud)
但是这段代码没有编译,因为左表达式不是左值:
(condition ? foo : throw 42) = bar; // compile error
Run Code Online (Sandbox Code Playgroud)
我在C++标准中检查了这个事实,并阅读:
第二个或第三个操作数(但不是两个)是一个throw-expression(15.1); 结果是另一个的类型,是一个右值.
这个规则有什么解释?
c++ ×1