当我在我的程序中初始化 float
变量时,我通常有这样的 vector :
Vector forward(0.f,0.f,-1.f),right(1.f,0.f,0.f),up(0.f,1.f,0.f)
( vector 只是 3 个 float ,如 struct Vector{ float x,y,z; };
)
这看起来多更容易阅读:
Vector forward(0,0,-1),right(1,0,0),up(0,1,0)
我必须使用 float
来初始化我的 float
变量吗?当我使用整数(或 double
)初始化 float
时,我是否会丢失任何东西或招致某种惩罚?
最佳答案
两者之间没有语义差异。不过,根据某些编译器的不同,可能会生成额外的代码。另见 this和 this SO 相同主题的问题。
我可以确认 gcc
为所有变体生成相同的代码
int main()
{
float a = 0.0f; /* or 0 or 0.0 */
return 0;
}
并且这段代码是
.file "1.c"
.text
.globl main
.type main, @function
main:
.LFB0:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
movl $0x00000000, %eax
movl %eax, -4(%rbp)
movl $0, %eax
popq %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE0:
.size main, .-main
.ident "GCC: (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3"
.section .note.GNU-stack,"",@progbits
相关行是
movl $0x00000000, %eax
将 a
更改为 0.1
(或 0.1f
)会将行更改为
movl $0x3dcccccd, %eax
gcc
似乎能够推导出正确的常量并且不会生成额外的代码。
关于c++ - 我必须使用 0.f 初始化 float 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12637581/