2014-03-03 53 views
1

我觉得好奇的是,const_cast不允许将一个右值(例如一个临时变量)转换为一个const限定的引用,尽管static_cast可以很好地工作。有没有人有解释为什么这样表现?const_cast一个右值const const

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会和右值处理的部分。

回答

3

const_cast被指定做非常具体的事情。它可以将左值转换为左值引用和右值引用右值。它可以在指针之间进行转换。它不能从右值转换为左值引用,即使是一个常量值。请阅读5.2.11了解演员能够做什么的确切内容;那一节没有列出,它不能这样做。

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

+0

谢谢,我觉得让我感到困惑的部分是,我不知何故预计演员阵容会造成一个右值。 – Drealmer

1

const_cast只能添加或删除const。而已。它不能做任何其他转换(包括从你的代码示例涉及的左值到const左值引用)。