操作符重载=和const引用
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,会发生什么?可能的错误是什么?
p。小问题:
我想把变量传递给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()
,并且要使它工作(const正确),您应该将其设置为
float get_r() const
第二,如果我不声明other_color为const会发生什么?
您将无法从const
合格的Color
s分配。您通常希望能够使用const
对象,以及其他作为赋值源的对象。此外,它使不修改源代码的意图对代码的读者清楚。
我想把我的变量传递给opengl glColor4v(colorx.return_rgba()),返回类Color的数组[r,g,b,a]。
返回一个特殊的"vehicle",它将包含数组并自动转换为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);
}
- 将const引用参数初始化为默认参数会导致悬空引用吗
- 为什么当我为 for(auto& it : myUnorderedMap) {... = std::move(it.second)} 时,我会得到一个 const 引用?
- 将对象传递给函数而不将其包装到 std::ref 中,而参数被指定为 const 引用
- 如何在构造函数中传递 const 引用时强制编译器不接受右值
- 为什么我需要三个嵌套的大括号来调用赋值运算符,将const引用到二维数组
- 对临时对象的Const引用不会延长其生存期
- 对 const 引用参数使用默认值会导致崩溃
- 在运算符重载中使用带有 const 引用的 friend 函数
- C++通过 const 引用传递时不调用派生类函数
- 具有字符串文本构造函数的类不适用于 const 引用初始化
- 为什么要返回对小类成员的 const 引用?
- C - 最好将枚举类作为值或const引用
- RVO:返回由值传递的值,即使显式分配给 const 引用也是如此
- const引用与可变成员的对象
- 每当传递lvalue时,每当通过rvalue传递时,将const引用存储
- 对类成员而不是 getter 的 Const 引用
- 从类型 'Matrix&' 的右值初始化 类型的非 const 引用无效 'Matrix'
- 在函数中使用 const 引用参数访问函数中成员的最佳实践 C++.
- STD ::配对的const引用如何工作
- 为什么我的C 函数拒绝返回const引用