-1

我正在努力编译一些开源库,然后我遇到了这个:

GLfloat campos[3] = {0.0 + modelview[2], 0.0 + modelview[6], 0.0 + modelview[10]};

这在 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]);

然后它起作用了。作为参考,modelview 是另一个 GLFloat,如下所示:

GLfloat modelview[16];

由于modelview是一个GLFloat,static_cast被应用于一个GLfloat的float总和的结果,但我确实希望免费得到这个。

为什么行为不同?

4

2 回答 2

5

0.0是 type 的文字double,而不是float(参考http://en.cppreference.com/w/cpp/language/floating_literal)。 GLfloat通常定义为float.

因此,0.0 + x(where xhas type GLfloat) 的结果是 type double

将 a 分配double给 afloat是(可能)缩小转换,这可能是编译器所抱怨的。

您可以改用0.0f(具有 type float)。

于 2013-09-05T13:12:41.013 回答
0

看起来原始代码正在使用 C++11 功能。GCC 和 Clang 对 C++11 的支持在版本之间差别很大。因此,您使用的 Clang 版本完全有可能不支持该功能。

于 2013-09-05T13:12:22.267 回答