【问题标题】:What happens when you assign a variable within a formula?在公式中分配变量时会发生什么?
【发布时间】:2020-01-12 06:52:42
【问题描述】:

Soo...这是不好的做法,也是调试的噩梦。但为了好奇:

当您在公式中分配一个变量时会发生什么?是否存在性能缺陷?

var xx, yy, zz;
xx = 45;
zz = xx * (yy = 45);

【问题讨论】:

  • 45 分配给变量yy。整个表达式 (yy = 45) 也有值 45 并且将像任何表达式一样使用。由于分配 = 的优先级,括号很重要。
  • @Scheff 表达式的值是 yy ,稍后(即在处理 * 的操作数时)它将查找其值并检索 45
  • @M.M 好的,正确:(yy = 45) 返回对yy 的引用。当它被用作表达式时,它“衰减”到它的值45。 ;-)

标签: c++ variables variable-assignment


【解决方案1】:

= 运算符将右侧值分配给左侧变量并返回。因此,从带括号向外读取 - 45 分配给 yy 然后返回。接下来,xx(也是45)乘以45,得到分配给zz2025

【讨论】:

  • 是的,所以我明白了,但是在装配级别会发生什么奇怪的事情还是会影响性能?还是只是丑陋?
  • =的结果是左操作数,这里yy(不是45
  • @FatalSleep 很难说在汇编代码级别会发生什么。 C++ 没有详细说明。部分原因是有太多完全不同的 CPU,它们都有完全不同的汇编语言。您可以使用a tool like godbolt 查看一些常见的编译器和一些常见的 CPU 架构会发生什么。您可以在链接中看到,在这种情况下,两种情况都生成了完全相同的代码(并且每个函数的大部分都被丢弃为不必要的)。
  • 在汇编级别,有或没有 yy 赋值的区别应该只是像mov, yy, eax 这样的附加指令。该值并没有从寄存器中清除,它实际上是一个副本而不是移动。
猜你喜欢
  • 1970-01-01
  • 2017-09-15
  • 1970-01-01
  • 1970-01-01
  • 2014-05-27
  • 2012-06-23
  • 1970-01-01
  • 2021-12-14
  • 1970-01-01
相关资源
最近更新 更多