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

2024-01-04

给定一个这样的类:

class Foo
{
   const int a;
};

是否可以将该类放入向量中?当我尝试时,我的编译器告诉我它不能使用默认的赋值运算符。我尝试编写自己的,但谷歌搜索告诉我,不可能为具有 const 数据成员的类编写赋值运算符。我发现的一篇文章说“如果你将[数据成员]设置为const,这意味着你一开始就不希望发生赋值。”这是有道理的。我已经编写了一个带有 const 数据成员的类,并且我从未打算在其上使用赋值,但显然我需要赋值将其放入向量中。有没有办法解决这个问题仍然保留常量正确性?


我已经编写了一个带有 const 数据成员的类,并且我从未打算在其上使用赋值,但显然我需要赋值将其放入向量中。有没有办法解决这个问题仍然保留常量正确性?

你必须问以下约束是否仍然成立

a = b;
 /* a is now equivalent to b */

如果此约束不成立a and b存在类型Foo(你必须定义“等效”的语义!),那么你就不能把Foo放入标准容器中。例如,auto_ptr不能放入标准容器中,因为它违反了该要求。

如果您可以说您的类型满足此约束(例如,如果 const 成员不以任何方式参与对象的值,但无论如何都考虑将其设为静态数据成员),那么您可以编写自己的类型赋值运算符

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

但请三思!。对我来说,看起来就是你的类型does not满足约束条件!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在向量中使用具有 const 数据成员的类 的相关文章

随机推荐