之间有什么区别吗?
double x;
x=0;
和
double x;
x=0.0;
可能是一个愚蠢的问题,但我无法在任何地方找到答案
答案 0 :(得分:3)
是。在x = 0
中,执行隐式类型宣传以将0
(int
}转换为double
0.0
。
答案 1 :(得分:3)
在实践中,虽然0
是int
,但第一种情况下存在隐式转换,因此不必有任何区别。
我试过了(在assembly.ynh.io上)。这个C代码:
#include <stdio.h>
int main(void)
{
double x, y;
x = 0;
y = 0.;
printf("x=%g and y=%g\n", x, y);
return 0;
}
为两个作业生成以下程序集(x
和y
):
0008 B8000000 00 movl $0, %eax
000d 488945F0 movq %rax, -16(%rbp)
0011 B8000000 00 movl $0, %eax
0016 488945F8 movq %rax, -8(%rbp)
换句话说,代码完全相同。这是由GCC建造的,没有优化。
我想这可以利用在两种情况下位图都为零的事实。
答案 2 :(得分:2)
我猜你的代码输出没有任何区别,如果使用完全相同,但是x=0
编译器必须从int
(0)执行0的隐式类型转换到double
(0.0)。最坏的情况,可能会将编译时间增加几纳秒?