c++ - C++ 中 const 到非 const 的转换

标签 c++ constants

我真的很生气 const这些天来的关键字,因为我不太熟悉它。我有一个存储所有 const 指针的 vector ,例如 vector<const BoxT<T> *> *Q_exclude ,并且在另一个类的构造函数中,我需要将此队列中的一个元素作为参数传入并将其分配给非常量成员。我的问题是:

如何将 const 变量分配给非 const 变量?我知道这没有意义,因为毕竟 const 是 const,不应该以任何方式改变。但是那个烦人的成员变量真的必须在这个过程中改变!我也可能将 vector 中的数据类型更改为非常量,但这会做太多工作。或者有谁知道如何避免这种情况?

最佳答案

您可以将 const 对象分配给非 const 对象就好了。因为您是在复制并因此创建了一个新对象,所以不会违反 constness。

Like so:

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/

相关文章:

c++ - 疯狂地尝试针对 OpenSSL/libcrypto 进行编译

c++ - 手动检查套接字连接是否那么重要?

constants - 如何在 LLVM IR 中初始化常量向量?

c - 为什么即使不更改变量,const 也不起作用?

php - 类文件中是否有全局 PHP 常量?

c++ - 关于运算符重载定义中的 const

c++ - 推导函数指针返回类型

c++ - 默认模板参数是否符合单一定义规则?

c++ - std::is_convertible 与 std::function 不一致

java - 常量作为字节?