【发布时间】:2016-04-21 14:57:53
【问题描述】:
假设我有
class A final {
int& ir;
public:
A(int& x) : ir(x) { }
void set(int y) { ir = y; } // non-const method!
int get() const { return ir; }
};
和
const int i;
显然我不能拥有
A a(i);
因为这会破坏 constness。但我也不能拥有
const A a(i);
尽管事实上这不会破坏 constness。 C++ 不支持“const-only”ctors,例如在这种情况下,需要const int&。有没有办法让const A a 包装对i 的引用 - 除了
A a(const_cast<int &>(i))
?
【问题讨论】:
-
您能描述一下您想要实现的目标吗?
-
“尽管没有打破 constness”?我不明白。之后您可以写信给
a.ir。我会说这很不安全。 -
想到的是
class A { variant<int&, int const&> v; A(const int&a):a(a) { } A(int &a):a(a) { } };。不确定这是否按原样工作,但可能是一个开始。然后使用[](auto &&a){}访问a.v -
@JohannesSchaub-litb:编辑希望更清晰。注意 ir 是私有的。你的建议很有趣,我正在考虑。
-
@paceholder:见编辑。 A 是一种 int 的外观(实际上我有一个更复杂的外观)。如果该 int 是非常量的,我应该能够构建一个可以改变其支持 int 的外观,但也可以构建一个“相同”的外观 const,并带有一个 const int 支持它。似乎 C++ 几乎迫使我选择或。
标签: c++ constructor constants const-correctness const-cast