c++ - 使用条件 if else 运算符初始化引用变量

标签 c++ reference conditional-operator

以下 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/

相关文章:

c++ - 如何在 C++ 中以十六进制打印 '\n' 字符

java - 对Java引用的困惑

rust - Rust不能在hashmap中插入不同的结构

c# - 如何在对列值的条件赋值中使用 DbNull.Value?

c++ - 使用 SWIG 将 vector 公开为内存 View

c++ - int 位运算

c - C 中的三元运算符参数评估

Java 在一行 if else 循环后设置值

c++ - 如何插入到已排序的单链表中?

c++ - std::vector 插入对象的拷贝或引用?