C++ 赋值运算符优先级

7
为了让事情更有意义,基本上有以下两种情况。
我某种程度上想象它们是相似的,先看右边。
但是"="只是简单地传递值。
"=="返回比较的结果"true",然后转换为1。
所以它们实际上并不相似?
int hehe = haha = 3;

int hehe = haha == 3;

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

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

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

但为什么(haha = 3) 的结果不是1,表示类似操作成功之类的东西?反而3一直传递到haha?这两种类型的术语是什么:3一直传播与某些操作成功。

int haha;
int hehe = haha = 3;

cout << haha << hehe;

其他编程语言使用“此操作成功”吗? - super
@super 我在大学课程中使用了一种名为Icon的晦涩语言,它有每个操作的“成功/失败”标志以及“结果”值。 - Code-Apprentice
3个回答

3

关于 (haha = 3) 的结果为什么不是1,而是3?

这是因为 C++ 语言规范并非如此定义的。实际上,赋值运算符的返回值就是被赋予的值。在这个例子中,haha = 3 运算的结果是 3

在 C++ 中,我们从来没有类似“操作成功”的内置运算符。在某些情况下,如果你错误地使用了某个运算符,编译器会给出一个错误。但是如果没有错误,编译器将假定你知道自己在做什么。


2

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


0

第一行:

创建一个名为"haha"的变量。

第二行:

  • 创建一个名为"hehe"的变量
  • 把3赋值给haha
  • 对haha的值进行评估并赋值给hehe

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接