[英]Why pass by const reference in overload operator+ with multiple parameters
[英]Operator overload = and const reference
我正在嘗試為C ++中的顏色構造一個類,
這不是一個作業,只是我仍在努力使用引用和const。
--Color.h
class Color{
private:
double r;
double g;
double b;
double a;
public:
//constructor, getters and setters...
Color& operator =(Color& other_color); //(1)
}
--Color.cpp
Color& operator=(Color& other_color){
this->r = other_color.get_r(); //line 41
this->b = other_color.get_b();
//and so on...
return *this;
}
像這樣,它可以正常工作,但是我聽說一個人必須放置一個const以避免由於錯誤而該對象將被賦值操作修改,因此一個人必須將另一個對象聲明為const。 像這樣:
Color& operator =(Color const& other_color); //(2)
但這給了我這個錯誤:
/Users/../color.cpp:41: error: passing 'const Color' as 'this' argument of 'float Color::get_r()' discards qualifiers
所以這是我的問題
這是怎么回事 第二,如果我不將other_color聲明為const會發生什么? 有哪些可能的錯誤?
PS .:小獎金問題:
我想將變量傳遞給opengl glColor4v(colorx.return_rgba()),以返回Color類的數組[r,g,b,a]。 這個:
float* Color::return_rgba(){
float rgba[4] = {this->r, this->g, this->b, this->a};
return rgba;
}
將不起作用,因為rgba在返回后將不在范圍內,因此它將被刪除,並且我的指針將指向未初始化的地址,該死的...
將'const Color'傳遞為'float Color :: get_r()'的'this'參數時,將丟棄限定符
這意味着您必須更進一步。 get_r
可能聲明為
float get_r()
並使其正常工作(正確常量),您應該使其
float get_r() const
第二,如果我不將other_color聲明為const會發生什么?
您將無法從const
限定的Color
進行分配。 通常,您希望能夠使用const
對象以及其他作為分配源的對象。 而且,它使意圖不修改源代碼的意圖不清晰。
我想將變量傳遞給opengl glColor4v(colorx.return_rgba()),以返回Color類的數組[r,g,b,a]。
返回一個特殊的“車輛”,該車輛將包含數組並自動轉換為float*
。 沿途
struct ColorQuadruplet
{
float data_[4];
// add initialization and such here
operator float*() { return data_; }
};
ColorQuadruplet Color::get_rgba() const
{
ColorQuadruplet ret;
// fill ret
return ret;
}
您在這里有兩個選擇。 一種是讓您的operator=
直接訪問源對象的成員:
Color &operator=(Color const &other) {
r = other.r;
g = other.g;
b = other.b;
a = other.a;
}
另一種方法(如果您堅持要完全使用顏色組件的訪問器,無論如何都可能要這樣做)是對您編寫的訪問器進行const限定:
double get_r() const { return r; }
^^^^^
這里的const
是我添加的您顯然沒有的部分。
編輯:就將值傳遞給glColor而言,我會考慮一個小的前端,如下所示:
gl_color(Color const &c) {
glColor4d(c.r, c.g, c.b, c.a);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.