2015-07-20 65 views
6

我:隱式轉換參考

struct vec { 
    __m128 m128; 
    inline vec(__m128 m128) : m128(m128) { 
    } 
} 

所以現在__m128可以隱式轉換爲vec,但是當我使用它,如:

void doStuff(vec &v) { *stuff be doing* } 
doStuff(_mm_set1_ps(1.0f)); //mm_set_ps returns __m128 

我得到一個錯誤說:

無法從__m128轉換爲& vec

所以有什麼問題,如何解決?

+2

你不能把一個非const引用臨時。 – CoryKramer

回答

13

doStuff取入到一個非const vec的參考。非常量引用不能像函數調用的結果那樣綁定到右值。

如果您需要修改vdoStuff,那麼_mm_set1_ps(1.0f)結果存儲在一箇中間變量,然後調用:

vec v = _mm_set1_ps(1.0f); 
doStuff(v); 

如果您不需要修改v,改變doStuff取它通過參考const來論證:

void doStuff(const vec &v) { /*stuff doing*/ } 
+0

爲什麼引用const是必要的? – Thomas

+0

rvalues我的意思是? – Thomas

+0

@Ragdoll對const的引用可能綁定到右值 –