【发布时间】:2014-06-17 11:15:35
【问题描述】:
我正在使用一个库,该库有一个类,该类的 init 函数与其构造函数不同。每次创建新实例时,我都需要调用,例如:
MyClass a;
a.init();
由于 init 不是 const,这会阻止我创建 const 实例(我不能写 const MyClass a)。有什么方法可以调用 init 然后从“here on out”声明(我猜对于范围的其余部分)我的变量是const?
这可行,但依赖于不触及原始变量:
MyClass dont_touch;
dont_touch.init();
const MyClass & a = dont_touch;
【问题讨论】:
-
答案是否定的。像你一样,我希望是的。
-
您也可以使用
const_cast调用init来快速而肮脏地进行操作。也就是说,为init调用声明对象const,并在对象周围声明const_cast。但是,const_cast通常被认为是不好的做法,我不得不说我认为templated solution 非常漂亮。 -
@Apriori 绝对未定义的行为。不能 const_cast 从已定义的 const 对象中去掉 const 并对它做非常量的事情。
-
@Andre Kostur:谢谢,好电话,我从未意识到或忘记这是未定义的行为。从好的方面来说,你可以看到我使用了多少 const_cast。 C++ 给了我枪...
-
如果你有一个对非 const 底层对象的 const 引用,你可以抛弃 const .. 但在这个例子中不是这样
标签: c++ constructor reference constants