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