我真的很生气 const
这些天来的关键字,因为我不太熟悉它。我有一个存储所有 const 指针的 vector ,例如 vector<const BoxT<T> *> *Q_exclude
,并且在另一个类的构造函数中,我需要将此队列中的一个元素作为参数传入并将其分配给非常量成员。我的问题是:
如何将 const 变量分配给非 const 变量?我知道这没有意义,因为毕竟 const 是 const,不应该以任何方式改变。但是那个烦人的成员变量真的必须在这个过程中改变!我也可能将 vector 中的数据类型更改为非常量,但这会做太多工作。或者有谁知道如何避免这种情况?
最佳答案
您可以将 const
对象分配给非 const
对象就好了。因为您是在复制并因此创建了一个新对象,所以不会违反 const
ness。
int main() {
const int a = 3;
int b = a;
}
It's different如果你想获得一个指针或引用 to 原始的 const
对象:
int main() {
const int a = 3;
int& b = a; // or int* b = &a;
}
// error: invalid initialization of reference of type 'int&' from
// expression of type 'const int'
如果你真的必须的话,你可以使用 const_cast
来绕过类型安全,但请记住你正在这样做:摆脱类型安全。在the below example 中通过b
修改a
是仍然未定义的:
int main() {
const int a = 3;
int& b = const_cast<int&>(a);
b = 3;
}
虽然它编译时没有错误,但任何事情都可能发生,包括打开黑洞或将您辛苦赚来的所有积蓄转入我的银行账户。
如果你已经达到了你认为这样做的必要条件,我会紧急重新审视你的设计,因为它有很大的问题。
关于c++ - C++ 中 const 到非 const 的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7311041/