const_cast常量引用的右值
const_cast an rvalue to const ref
我觉得很奇怪,const_cast不允许将右值(例如临时变量)转换为常量限定引用,尽管它与static_cast一起工作得很好。有人解释为什么它会这样吗?
const_cast< const std::string & >( std::string( "hello" ) ); // doesn't compile
static_cast< const std::string & >( std::string( "hello" ) ); // compiles
请不要陷入"const_cast是邪恶的"论点,我在这里试图做的是正确理解C++标准中涉及const_cast和右值的部分。
const_cast
被指定用于执行非常具体的事情。它可以将左值转换为左值引用,将右值转换为右值引用。它可以在指针之间进行转换。它不能从右值转换为左值引用,即使是常量引用。阅读 5.2.11 了解演员可以做什么的确切列表;该部分未列出的内容,它无法执行。
static_cast
可以执行其他操作,如 5.2.9 中所列。其中,它可以从右值转换为右值引用到常量。
const_cast
只能添加或删除const
。就是这样。它不能执行任何其他转换(包括从右值到常量左值引用,代码示例涉及)。
相关文章:
- 什么时候在C++中返回常量引用是个好主意
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 为什么我可以通过引用修改常量返回
- 返回常量对象引用 (getter) 和仅返回字符串有什么区别?
- 将常量指针引用绑定到非常量指针
- 通过常量引用传递参数的矩阵模板类
- 按值捕获引用时出现非常量
- 在C++中使用非常量引用作为常量
- 具有常量引用参数的函数模板专用化
- 多个"常量引用"变量可以共享同一个内存吗?
- 为什么 STL 容器适配器堆栈中的 top 返回常量引用?
- 为什么按值传递QStringView比引用常量更快?
- 通过引用常量函数调用另一个类的非常量函数
- 构造常量对象与引用常量对象
- 引用“常量value_type”时出错
- 为什么可以在 for 语句中重新分配引用常量
- 程序反馈:命名循环索引和引用常量数据
- 堆还是栈?在c++中函数调用中引用常量字符串时
- 为什么常量结构数组在按名称引用常量结构时不放在 .rodata 中?
- 为什么编译器允许在函数中发送对迭代器的引用,该函数引用常量迭代器