【发布时间】:2014-07-30 18:56:36
【问题描述】:
在 C++ 中,运算符 ?: 如果第二个和第三个参数是相同类型的左值,则可以是一个左值,例如:
int foo = 0, bar = 1;
bool condition = true;
(condition ? foo : bar) = 42; // correct
也可以在这个操作符中抛出一些东西:
bar = (condition ? foo : throw 42); // still correct
但是这段代码无法编译,因为左表达式不是左值:
(condition ? foo : throw 42) = bar; // compile error
我在 C++ 标准中检查了这一事实并阅读了以下内容:
第二个或第三个操作数(但不是两者)是 throw 表达式 (15.1);结果是另一个的类型,是一个右值。
这个规则有什么解释?
【问题讨论】:
-
condition ? foo : bar = 42;是condition ? foo : (bar = 42);。 -
谢谢,我加了大括号。我的问题仍然存在。
-
@dyp 是的,看起来这在 C++14 中已修复。
-
如果条件为真,则结果为
foo = bar。但是如果为false,会导致throw 42 = bar。
标签: c++