以下 C++ 无效,因为引用变量需要初始化器:
int& a; // illegal
if (isfive) {
a = 5;
} else {
a = 4;
}
但是,MSVC 似乎认为这样没问题:
int& a = isfive ? 5 : 4;
这对我来说意味着 MSVC 实际上将条件运算符视为单个表达式,而不是将其扩展为 if-else 语句。
使用条件运算符初始化引用是否总是有效的 C++?
最佳答案
三元运算符不会扩展为 if-else
结构(不是根据语言,实现可能会生成等效的二进制文件,但在语言级别它们是不同的)。所以下面的代码是有效的:
int four = 4, five = 5;
int& r = condition? four : five;
问题中的原始示例依赖于 Microsoft 扩展,该扩展(错误地)允许将非常量引用绑定(bind)到右值表达式。
关于c++ - 使用条件 if else 运算符初始化引用变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9200087/