C++ 赋值优先级

时间:2021-02-09 06:38:13

标签: c++ operator-precedence

为了让事情更有意义,主要针对以下两种情况。

我以某种方式想象它们是相似的,首先是右侧。

但是“=”只是传递值

“==”返回比较结果“true”,然后转换为1。

所以它们实际上并不相似?

int hehe = haha = 3;

int hehe = haha == 3;

//----------------------------------------- --

对于下面的代码,你能解释一下为什么 haha​​ 和 hehe 都是 3 吗?

我知道赋值是右结合的。所以 haha​​ 先分配了 3。

但是为什么(haha = 3)的结果不是1,说明操作成功了?相反,3 一直传播到哈哈?这两种类型的术语是什么:3 一路传播 vs 某些操作成功。

int haha;
int hehe = haha = 3;

cout << haha << hehe;

3 个答案:

答案 0 :(得分:3)

<块引用>

但是为什么(haha = 3)的结果不是1,说明操作成功了?

因为这不是 C++ 语言规范所说的工作方式。相反,分配的结果是分配的值。在这种情况下,haha = 3 的计算结果为 3

在 C++ 中,我们从来没有为内置运算符提供“此操作成功”。在某些情况下,当您错误地使用运算符时,编译器会报错。但是,如果没有发现错误,编译器只会假设您知道自己在做什么。

答案 1 :(得分:2)

因为,当赋值发生时,运算符右侧的所有表达式都需要计算,然后结果将分配给运算符左侧的变量。在评估表达式 hehe = haha = 3 时,操作系统应该首先评估 haha = 3。这就是为什么 hehe 等于 haha,而 haha 等于 3

答案 2 :(得分:0)

在第一行: 创建了一个名为“haha”的变量。

在第二行:

  • 创建了一个名为“hehe”的变量
  • 3 被分配给 haha​​
  • haha 的值被评估并赋值给 hehe

建议: 始终在创建时初始化变量。

相关问题