在向量中使用带有const数据成员的类

Max*_*Max 10 c++ const vector variable-assignment

鉴于这样的类:

class Foo
{
   const int a;
};
Run Code Online (Sandbox Code Playgroud)

是否可以将该类放在向量中?当我尝试时,我的编译器告诉我它不能使用默认赋值运算符.我试着写自己的,但谷歌搜索告诉我,为const数据成员的类编写赋值运算符是不可能的.我发现的一篇文章说"如果你使[数据成员] const意味着你不想让任务首先发生." 这是有道理的.我已经用const数据成员编写了一个类,我从来没有打算在其上使用赋值,但显然我需要赋值将它放在向量中.有没有办法保持const正确性?

Joh*_*itb 8

我已经用const数据成员编写了一个类,我从来没有打算在其上使用赋值,但显然我需要赋值将它放在向量中.有没有办法保持const正确性?

您必须询问以下约束是否仍然有效

a = b;
 /* a is now equivalent to b */
Run Code Online (Sandbox Code Playgroud)

如果这个约束是不正确的ab被类型的Foo(你必须定义什么"等价"的意思语义!),那么你就不能放Foo成一个标准集装箱.例如,auto_ptr不能将其放入标准容器中,因为它违反了该要求.

如果你可以说你的类型满足这个约束(例如,如果const成员不以任何方式参与你的对象的值,但是然后考虑让它成为静态数据成员),那么你可以自己编写赋值运算符

class Foo
{
   const int a;
public:
   Foo &operator=(Foo const& f) {
     /* don't assign to "a" */
     return *this;
   }
};
Run Code Online (Sandbox Code Playgroud)

但三思而后行!.对我来说,它看起来像你的类型并不满足约束!


Jes*_*der 3

使用指针向量std::vector<Foo *>。如果您想避免自己清理的麻烦,请使用boost::ptr_vector