2

我觉得奇怪的是 const_cast 不允许将右值(例如临时变量)转换为 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 是邪恶的”论点,我在这里要做的是正确理解 C++ 标准中处理 const_cast 和 rvalues 的部分。

4

2 回答 2

3

const_cast被指定做非常具体的事情。它可以将左值转换为左值引用,将右值转换为右值引用。它可以在指针之间转换。它不能从右值转换为左值引用,即使是 const 引用。阅读 5.2.11 以了解演员可以做什么的确切列表;该部分未列出的内容,它不能做。

static_cast可以做5.2.9中列出的其他事情。其中,它可以从右值转换为左值引用到const。

于 2014-03-03T13:05:38.153 回答
1

const_cast只能添加或删除const。就是这样。它不能进行任何其他转换(包括您的代码示例涉及的从右值到 const 左值引用)。

于 2014-03-03T13:04:48.197 回答