【发布时间】:2010-10-02 21:53:34
【问题描述】:
int x = 2;
volatile int y = 2;
const int z = x/y;
int main(){
int x = 2 + 3;
double d = 7 / 3;
}
我在这里有三个问题:
首先,在这种情况下,编译器可以计算出编译时'z'的值为1吗?
其次,我观察到编译器不会生成用于将 2 和 3 相加来初始化 x 的汇编指令。它直接用5初始化x。'd'也可以这样做吗?
第三,关于这两个概念有什么好书可以读吗?标准中的任何引用都会有所帮助(标准文档似乎是一个有趣的地方,虽然非常可怕)
【问题讨论】:
-
既然你是为 x 做的,为什么不检查一下 d = 7 / 3 的组装说明是什么?
-
@Emile Cormier:涉及到 fld 和 fstp 指令。虽然我还没有放弃,但我不能理解太多
-
顺便说一句,在这段代码中 d == 2,这是整数除法。
-
等等,您检查了程序集是否有
int = 2 + 3,但没有检查double d = 7 / 3?
标签: c++ optimization floating-point volatile