C++ 赋值优先级

C++ assignment precedence

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

不知怎么的,我以为它们很相似,先是右手边。

但是“=”只是传递值

"==" returns比较的结果为"true",然后转换为1。

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

int hehe = haha = 3;

int hehe = haha == 3;

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

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

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

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

int haha;
int hehe = haha = 3;

cout << haha << hehe;

But why the result of (haha = 3) is not 1 indicating something like the operation is successful?

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

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

因为赋值时,需要对运算符右侧的所有表达式求值,然后将结果赋值给运算符左侧的变量。在计算表达式 hehe = haha = 3 时,OS 应该首先计算 haha = 3。这就是为什么 hehe 等于 haha,而 haha 等于 3

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

第二行:

  • 创建了一个名为“hehe”的变量
  • 3 被分配到哈哈
  • haha的值求值赋值给hehe

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