const_cast是否返回角括号内指定的类型

时间:2014-10-15 09:04:11

标签: c++ casting constants

我对const_cast的返回类型感到困惑?尖括号<>内的类型是返回类型吗?

const int i = 5;
int b = const_cast<int&>(i);

const_cast是否返回int&(整数引用),如果是,那么为什么我们如何将它存储在整数中?或者我们应该将代码修改为:

const int i = 5; 
int & b  = const_cast<int&>(i);

3 个答案:

答案 0 :(得分:3)

  

const_cast是否返回在angular括号内指定的类型

它计算角括号中类型的表达式。这里重要的是你如何使用这个表达式:

const int i = 5;
int b = const_cast<int&>(i);

在这种情况下,b只是i的副本。演员表不是必需的。

const int i = 5; 
int & b  = const_cast<int&>(i);

此处b指的是i。请注意,使用它来修改i的值是未定义的行为

答案 1 :(得分:3)

是。但是,不应该返回,而应该说结果表达式的类型<>中的类型。

当该类型是引用时,如const_cast<int&>中所示,这意味着它是l值。在第一种情况下没有区别,因为无论如何它立即转换为r值。但是,这样的r值中的const会被忽略,所以:

int b = const_cast<int&>(i); //ok
int b = const_cast<int>(i);  //also ok
int b = i;  //hey! also ok

在第二种情况下存在差异,因为r值转换没有l值:

int &b  = const_cast<int&>(i); //ok
int &b  = const_cast<int>(i); //error: cannot bind a reference to an r-value
int &b  = i; //error: cannot bind a `int&` to a `const int&`

答案 2 :(得分:0)

  

角括号内的类型&lt;&gt;是返回类型?

是的,const_cast<int&>(i)的返回类型是int&。之后,您将其分配给int,并复制该值。

int & b = const_cast<int&>(i);中,您将其分配给int&,现在b是对i的引用。请注意b上的任何修改都会导致undifined behaviour