我想不通使用下面的代码的时候,为什么我总是收到编译错误。临时对象和非const引用
简单的结构和它的init助手功能:
typedef struct _ccColor4F
{
GLfloat r;
GLfloat g;
GLfloat b;
GLfloat a;
} ccColor4F;
static inline ccColor4F ccc4f(const GLfloat r, const GLfloat g, const GLfloat b, const GLfloat a)
{
ccColor4F c4 = {r, g, b, a};
return c4;
}
,并使用该结构的方法:
void TexturePolygon::setColor(ccColor4F &color);
现在,如果我尝试使用init功能如下我得到一个编译错误。
poly->setColor(ccc4f(1.f, 1.f, 1.f, 1.f));
非const左值参考输入 'ccColor4F'(又名 '的cocos2d :: _ ccColor4F')不能结合到临时类型的 'ccColor4F'
我必须改变参数将setColor设置为“常量引用”以避免错误。我明白一个临时对象必须绑定到一个const引用。但在这种情况下,它是一个内联函数,所以不应该有任何临时对象。我错过了什么吗?
谢谢。洛朗
我不确定你为什么认为'inline'会在这里有所作为。 –
'inline'允许您在多个翻译单元中定义该功能(对于许多编译器来说,这对于内联调用是必要的)。它不强制调用内联,或者改变它的任何语义。即使优化了参考参数,仍然将其视为参考。 –
@FredLarson我以为'inline'会改变调用的语义。 –