【发布时间】:2014-03-17 02:03:11
【问题描述】:
我想实现具有以下属性的类:
class A { ... };
const A a; // ok - should work.
A b; // compilation error - shouldn't work!
另外,如果一个对象的constness 依赖于构造函数签名会更好:
const A c(1); // ok - should work.
A d("a"); // ok - should work.
A e(2); // compilation error - shouldn't work!
如果需要,允许使用 C++11。
更新 #1
由于我不知道答案,所以不需要严格遵循上面的代码 - 欢迎任何提供类似语义的 C++ 模式。
【问题讨论】:
-
不能,但是可以让所有成员函数
const -
我记得我认为为此目的使用
const构造函数会很有用,尽管我不再记得我的用例了。与复制与不复制某些内部数据有关。 -
老实说,我真的不明白这与班级有什么关系。您可以使成员函数和成员数据
const足以满足所有需求。 -
@OP 我不知道有什么方法可以临时做到这一点,但你能解释一下你所问的和不可变类的非常量实例之间的区别(所有方法都是 const ,没有非常量、非私有数据)。
-
如果您将
A类型设为私有并禁止复制和移动,则只能绑定对其的引用。然后,您可以提供make_A函数,这些函数根据参数类型返回 const 和非 constAs。 Live example(通过其他make_A重载可以允许显式复制和显式移动。)
标签: c++ c++11 constructor constants