常量的副本
Copy of a constant?
Polynomial operator + (const Polynomial& p);
//Adds existing Polynomial to p, returning the result
因为我们不能改变const的值,有没有办法复制这个p来访问p的函数呢?
对不起,伙计们在工作和相当显示整个程序,但在Poly.H在私人领域它读:私人:列表& lt;Term> poly
在polytest。cpp
中如果我需要两个多项式P_add = poly1 + poly2
我需要在运算符+中写函数来添加类似的项。
如果您需要复制,那么只需在函数
中复制它Polynomial operator + (const Polynomial& p);
{
Polynomial copy = p;
// do stuff
}
现在,仅仅因为p
是const
并不意味着你不能使用它的成员/函数。典型的operator+
看起来像
Something operator + (const Something& s);
{
return Something(this->some_memeber + s.some_memeber,
this->another_memeber + s.another_memeber);
}
如果您需要operator+
内部的副本,最直接的方法是通过(const
)值传递p
:
Polynomial operator+ (Polynomial p);
现在p
是您传入的对象的副本,您可以在operator+
中弄乱。当然,如果你传递const
值,比如
Polynomial operator+(const Polynomial p);
则副本本身将是const
,因此您将只能访问其const
成员函数。
正如在评论中提到的,有时传递const
引用并确保您只访问const
成员函数是您实际需要的,因为您可以避免额外的复制。然而,在某些情况下,复制是必要的(这里很可能不是),例如在实现著名的复制-交换习惯用法时,在这种情况下,按值传递对象是一种可行的方法,也是实现预期效果的最简单的方法。
听起来,您缺少const
对Polynomial
的一些成员函数的说明符,例如,您可能有:
// Can modify *this.
std::vector<double> coefficients() { … }
当你需要时:
// Cannot modify *this.
std::vector<double> coefficients() const { … }
添加const
指定符将成员函数中this
的类型从Polynomial*
更改为const Polynomial*
。在const
引用中,只能调用const
成员函数。(您仍然可以在非const
引用上调用const
成员函数)
编辑:您可能会在成员函数的末尾引用const说明符,如下所示:
class Test
// cannot modify members of Test
void test() const;
// can modify members of Test
void test2();
};
当对const对象进行操作时,只能在最后调用声明为const的方法。
如果需要修改const成员函数中的成员(这种情况并不常见),可以将其声明为mutable
前面的const说明符Polynomial&p意味着它是一个对多项式的const引用,因此你不能修改p的值。I与访问函数无关。如果方法是在类中声明的,则可以访问同一类中的所有方法。
你可以做一个简单的复制来处理拷贝而不是输入参数的引用:
Polynominal p2(p);
或
Polynominal p3 = p;
- #定义c-预处理器常量..我做错了什么
- 用C++中的一个变量定义一个常量
- 什么时候在C++中返回常量引用是个好主意
- 代理对象的常量正确性
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 通过多个头文件使用常量变量
- 在cuda线程之间共享大量常量数据
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 是默认情况下分配给char数组常量的值
- 私有类型的静态常量成员
- 类似枚举的计算常量
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- C++全局常量数组:是否保证合并(优化)到一个副本中
- 传递常量引用与创建临时常量副本相同,那么为什么要传递常量引用
- 对象或常量指针的副本
- 为什么在 constexpr 函数中允许返回对常量指针的引用,但不返回副本
- 常量引用和创建副本
- 传递常量副本
- 常量的副本