class Vec3{
private:
float x, y, z;
public:
Vec3() = default;
Vec3(const float c) {x = c; y = c; z = c;}
static Vec3& normalize(Vec3& v) {/* normalize */ return v;}
};
Vec3 aaa = Vec3(1.0f);
Vec3 bbb = Vec3::normalize(Vec3(1.0f));
Vec3 ccc = Vec3::normalize(aaa);
我想寫採取向量作爲參數的函數,做他們的一些工作並返回它們作爲參考。不能讓一個函數同時接受右值和左值引用
在上面的代碼bbb
不會編譯,因爲它是一個右值的非常量引用。由於normalize
需要修改對象,所以我無法使其成爲const。如果我讓函數接受右值引用(Vec3&& v
),那麼ccc
不會編譯,因爲aaa
是一個左值。我可以做這個工作,而不必編寫normalize
的兩個版本嗎?
(我感到困惑右值VS左值的引用,我並不例如明白爲什麼someFunc(const Vec3& v)
都接受右值和左值而非常量的版本則沒有。)
這可能會解釋爲什麼臨時可以綁定到const引用的一些混淆:https://stackoverflow.com/questions/36102728/why-is-it-allowed-to-pass-r-values-by-const引用的但不按正常refrence – NathanOliver