jeh*_*uty -1 c++ opengl xcode gcc llvm
我正在努力编译一些开源库,然后我遇到了这个:
GLfloat campos[3] = {0.0 + modelview[2], 0.0 + modelview[6], 0.0 + modelview[10]};
Run Code Online (Sandbox Code Playgroud)
这在CentOS上编译很好,使用gcc,我真的期望它.
但是,在Mac上,使用带有llvm的XCode,它将无法编译,我不得不将其更改为:
GLfloat campos[3] = static_cast<GLfloat>(0.0 + modelview[2]), static_cast<GLfloat>(0.0 + modelview[6]), static_cast<GLfloat>(0.0 + modelview[10]);
Run Code Online (Sandbox Code Playgroud)
然后它奏效了.作为参考,modelview是另一个GLFloat,如下所示:
GLfloat modelview[16];
Run Code Online (Sandbox Code Playgroud)
由于modelview是一个GLFloat,static_cast正在应用于带有GLfloat的float总和的结果,但我确实希望免费得到它.
为什么行为不同?
0.0是一个文字的类型double,而不是float(参考http://en.cppreference.com/w/cpp/language/floating_literal).
GLfloat通常定义为a float.
因此,0.0 + x(where where xtype GLfloat)的结果是类型double.
分配double给a float是一个(可能)缩小的转换,这可能是编译器所抱怨的.
您可以使用0.0f(具有类型float).