在像C++
这样的语言中,有一个像x += y
这样的表达式。
如果x
已经被特定的浮点数(例如3.0
)占据,那么后面两个之间是否存在FLOP计数差异?
x += 1.0
x = x + 1.0
具体来说,在Python
之类的语言中,
其中第一个表示数据结构本身的修改,第二个表示变量的重新分配。 (参考:What is the difference between i=i+1 and i+=1 in a for loop?
对于FLOP
个计数,可能对以下两件事感兴趣:
+
的数量*
的数量因此,C++
的新手可能会很自然地想知道两者的FLOP计数之间的差异。
正如回答者所指出的,当我们使用C++
对象时,即使在volatile
中也会出现差异。
答案 0 :(得分:3)
C和C ++没有提及CPU操作。两种语言都指定了表达式的行为,而不是表达式的实现方式。
x = x + 1.0
和x += 1.0
的行为是相同的,除了评估x
的任何副作用在前者中发生两次,在后者中发生一次。如果x
是非volatile
对象的名称,则没有语义上的区别,任何体面的编译器都应为两者生成完全相同的代码。
如果您编写类似以下内容,则可能会出现差异:
arr[func()] = arr[func()] + 1.0;
vs
arr[func()] ++;