C++ 赋值优先级

cxf*_*f54 7 c++ operator-precedence

为了让事情更有意义,基本上针对以下两种情况。

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

但是“=”只是传递值

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

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

int hehe = haha = 3;

int hehe = haha == 3;
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

int haha;
int hehe = haha = 3;

cout << haha << hehe;
Run Code Online (Sandbox Code Playgroud)

Cod*_*ice 3

但为什么(哈哈=3)的结果不是1表示操作成功呢?

因为 C++ 语言规范并不是这么说的。相反,赋值的结果是所分配的值。在这种情况下haha = 3评估为3

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