我正在爲Vector3和Quaternion編寫類。 這裏是我的代碼:使用C++的「const」關鍵字的建議
// .h file
Quaternion operator * (const Vector3& v) const;
// .cpp file
Quaternion Quaternion::operator * (const Vector3& v) const
{
float s = -(m_v.dot(v));
Vector3 vt = (v*m_s) + m_v.cross(v);
return Quaternion(s, vt.getX(), vt.getY(), vt.getZ());
}
我的錯誤與「回報」行,因爲我裏面Vector3.h這樣宣稱:
float& getX();
float& getY();
float& getZ();
我想通了,我可以通過聲明喜歡這裏通過這個案例:
const float& getX() const;
const float& getY() const;
const float& getZ() const;
我也看到了,我不會用這個了:
Vector3 v(1.0f, 2.0f, 3.0f);
v.getX()++;
// or v.getX() += 1; => coz I feel writing code like this is more readable.
而且必須這樣寫代碼:
float x = v.getX(); // I dont like this coz it will waste memory
// if it's not an "float" but a big object
x += 1;
v.setX(x);
所以,我的問題:
- 有什麼辦法來滿足這兩種情況下,或者,簡單地說,就是一個權衡選擇?
- C++程序員經常使用「const」關鍵字是一個好習慣嗎?
1.提供'const'和non-'const'重載。是的。但是,如果你的getter和setters返回數據引用,那麼你可能會公開數據成員。 – juanchopanza 2014-10-19 12:32:55
你可以只返回float而不是float&或const float&。該方法本身應該是const的,否則你不能將它用於非const對象。你寫「如果不是浮動但是一個大對象,我不喜歡這個」 - 但它是_is_浮動的。 – gnasher729 2014-10-19 12:35:31
給juanchopanza和gnasher729:謝謝你的提示。 – Khoa 2014-10-19 14:39:22