我想不通使用下面的代碼的時候,爲什麼我總是收到編譯錯誤。臨時對象和非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'會改變調用的語義。 –