const_cast常量引用的右值

const_cast an rvalue to const ref

本文关键字:引用 常量 cast const      更新时间:2023-10-16

我觉得很奇怪,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。就是这样。它不能执行任何其他转换(包括从右值到常量左值引用,代码示例涉及)。