给定一个这样的类:
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(使用前将#替换为@)