【发布时间】:2012-03-01 06:54:12
【问题描述】:
以下 C++ 无效,因为引用变量需要初始化器:
int& a; // illegal
if (isfive) {
a = 5;
} else {
a = 4;
}
但是,MSVC 似乎认为这没问题:
int& a = isfive ? 5 : 4;
这对我来说意味着 MSVC 实际上将条件运算符视为单个表达式,而不是将其扩展为 if-else 语句。
使用条件运算符初始化引用是否总是有效的 C++?
【问题讨论】:
-
我很好奇如果您尝试在装配级别上进行比较会发生什么...
-
如何比较可编译的汇编代码和不编译的代码?
-
@MichaelKrelin:不幸的是,在 Visual C++ 中,这种非法代码是被接受的。 (第二种形式)。
-
@MichaelKrelin:所以我们真正拥有的是无法编译的代码和更多无法编译的代码,我同意很难比较程序集:)
-
@krynr,你是说第二个?参考暂时的,我想。我想知道有多短命......我实际上并不认为 OP 意味着两个常量,无论如何,他可能在谈论条件并想出了不幸的例子。
标签: c++ reference conditional-operator