const_cast是const ref的一个rvalue

时间:2014-03-03 12:59:56

标签: c++ const-cast

我发现很奇怪const_cast不允许将rvalue(例如临时变量)转换为const限定引用,尽管它与static_cast一起工作得很好。有没有人解释为什么它会这样做?

const_cast< const std::string & >( std::string( "hello" ) ); // doesn't compile
static_cast< const std::string & >( std::string( "hello" ) ); // compiles

请让我们不要进入“const_cast is evil”论点,我在这里要做的是正确理解处理const_cast和rvalues的C ++标准部分。

2 个答案:

答案 0 :(得分:3)

const_cast被指定用于执行非常具体的操作。它可以将左值转换为左值引用,将右值转换为右值引用。它可以在指针之间进行转换。它不能从右值转换为左值引用,甚至是常量引用。阅读5.2.11以获得演员可以做的确切列表;那部分没有列出,它不能做。

static_cast可以执行其他操作,如5.2.9中所列。其中,它可以从rvalue转换为lvalue引用到const。

答案 1 :(得分:1)

const_cast只能添加或删除const。而已。它不能进行任何其他转换(包括从rvalue到const lvalue引用,您的代码示例涉及)。