我正在查看以下示例
const int a = 12;
int b;
b = const_cast<int&>(a);
我想知道&
模板参数类型在上面的含义以及为什么没有&
?
更新:
让我重新表述我的问题。我理解它是一个参考,但它指的是什么变量?例如这里它声明它引用原始(未转换)指针的指针。我想知道它在非指针类型的情况下引用了什么,以及b
当它没有被声明为引用时如何引用?
我正在查看以下示例
const int a = 12;
int b;
b = const_cast<int&>(a);
我想知道&
模板参数类型在上面的含义以及为什么没有&
?
更新:
让我重新表述我的问题。我理解它是一个参考,但它指的是什么变量?例如这里它声明它引用原始(未转换)指针的指针。我想知道它在非指针类型的情况下引用了什么,以及b
当它没有被声明为引用时如何引用?
const_cast
不是模板,而是类型转换。看起来是模板参数的是转换的目标类型,在这种情况下,这意味着您想要获得一个非常量引用,int
该引用引用与a
.
a
是const int&
当你const_cast
按照你写的那样做的时候。
您只能修改指针和引用类型的 cv 限定符,而const_cast
不是值。这是因为为 rvalues 指定 constness 只有当它是引用或指针类型并且因此可以被修改时才有意义。
因此,如果您只想要变量的(非常量)值a
,只需编写
b = a;
因为 const-ness 无论如何都被忽略了。b
然后从 复制构造a
。
基本上 a 是 const,b 不是 const
所以 const_cast 基本上说 b 存储在 a 但删除了 const。