gpt4 book ai didi

c++ - 我必须使用 0.f 初始化 float 吗?

转载 作者:可可西里 更新时间:2023-11-01 16:34:41 25 4
gpt4 key购买 nike

当我在我的程序中初始化 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 时,我是否会丢失任何东西或招致某种惩罚?

最佳答案

两者之间没有语义差异。不过,根据某些编译器的不同,可能会生成额外的代码。另见 thisthis 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com