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
建议:
始终在创建时初始化变量。
为了让事情更有意义,主要针对以下两种情况。
不知怎么的,我以为它们很相似,先是右手边。
但是“=”只是传递值
"==" 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
建议: 始终在创建时初始化变量。