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

Does const_cast return the type specified inside angular bracket

本文关键字:类型 cast 是否 返回 const      更新时间:2023-10-16

我对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);

是。但是,与其说返回,不如说结果表达式的类型是<>中的类型。

当该类型是引用时,如在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

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

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&`

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

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

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的值是未定义的行为

角括号内的类型<>退货类型是什么?

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

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