C++ const_cast模板参数中存在&意味着什么

C++ const_cast模板参数中存在&意味着什么,c++,casting,const-cast,C++,Casting,Const Cast,我正在复习下面的例子 const int a = 12; int b; b = const_cast<int&>(a); 我想知道上面的模板参数类型表示什么,为什么没有&,它就不能工作 更新: 让我重新表述我的问题。我理解它是一个参考,但它指的是什么变量?例如,它声明,对于指针,它引用原始的uncast指针。我想知道它在非指针类型的情况下引用了什么,以及在引用未声明为引用的情况下如何引用?常量转换不是模板,而是类型转换。似乎是模板参数的是转换的目标类型,在本例中,这意味

我正在复习下面的例子

const int a = 12;
int b;
b = const_cast<int&>(a);  
我想知道上面的模板参数类型表示什么,为什么没有&,它就不能工作

更新:


让我重新表述我的问题。我理解它是一个参考,但它指的是什么变量?例如,它声明,对于指针,它引用原始的uncast指针。我想知道它在非指针类型的情况下引用了什么,以及在引用未声明为引用的情况下如何引用?

常量转换不是模板,而是类型转换。似乎是模板参数的是转换的目标类型,在本例中,这意味着您希望获得对int的非常量引用,该引用引用与转换相同的对象。

常量转换不是模板,而是类型转换。似乎是模板参数的是转换的目标类型,在本例中,这意味着您希望获得对int的非常量引用,该引用引用与a相同的对象。

a是常量int&当您在编写它时执行常量转换

只能使用const_cast修改指针和引用类型的cv限定符,而不能修改值的cv限定符。这是因为仅当右值是引用或指针类型且因此可以修改时,为右值指定常量才有意义

因此,如果您只需要变量a的非常量值,只需编写

b = a;
因为常数被忽略了。然后,b是从a复制而来的。

a是const int&当您在编写它时进行const_转换时

只能使用const_cast修改指针和引用类型的cv限定符,而不能修改值的cv限定符。这是因为仅当右值是引用或指针类型且因此可以修改时,为右值指定常量才有意义

因此,如果您只需要变量a的非常量值,只需编写

b = a;

因为常数被忽略了。然后,b是由a构成的副本。

基本上a是常量,b不是常量


所以const_cast基本上说b存储在a中,但是删除了const

基本上a是常数,b不是常数


所以const_cast基本上说b存储在a中,但是删除了const

值是否忽略常量?你可能想进一步解释你的意思,就目前的情况而言incorrect@DavidRodríguez dribeas我把它改成右值了,现在正确了吗?我的意思是,当我在表达式rvalue?中使用常量值时,它的常量并不重要。只有当我试图给它赋值左值时?。但也许我不知道这个词的正确术语。在第一行你写了一个is const int&你能解释一下这是什么意思吗?因为我的代码中有const intI,我想说的是:只要const基元类型的变量是表达式的一部分,它就是int,既不是const int&,也不是const int,也不是int&。修改表达式的结果是没有意义的,因此说表达式是常量是没有意义的。但是,如果我们考虑用户定义的类型,这当然是不同的。我试图重述我想说的话,请看我的编辑。我觉得这有点难以表达;值是否忽略常量?你可能想进一步解释你的意思,就目前的情况而言incorrect@DavidRodríguez dribeas我把它改成右值了,现在正确了吗?我的意思是,当我在表达式rvalue?中使用常量值时,它的常量并不重要。只有当我试图给它赋值左值时?。但也许我不知道这个词的正确术语。在第一行你写了一个is const int&你能解释一下这是什么意思吗?因为我的代码中有const intI,我想说的是:只要const基元类型的变量是表达式的一部分,它就是int,既不是const int&,也不是const int,也不是int&。修改表达式的结果是没有意义的,因此说表达式是常量是没有意义的。但是,如果我们考虑用户定义的类型,这当然是不同的。我试图重述我想说的话,请看我的编辑。我觉得这有点难以表达;如果你不认识一个参考,你应该向后退一步,读一本好的C++初学者的教程,它的意义是…等等。。。推荐人!让我重新表述我的问题。我知道这是一个参考,但它指的是什么变量?例如,在msdn.microsoft.com/en us/library/bz6at95h%28v=vs.110%29.aspx中,它指出,在指针的情况下,它引用原始的非广播指针。我想知道它引用了什么,以防非指针类型不引用任何变量。如果你没有认识到一个参考,你可能应该后退一步,读一本好的C++初学者的教程,它的意义是…等等。。。推荐人!让我重新表述我的问题。我知道这是一个参考,但它指的是什么变量?例如,在msdn.microsoft.com/en us/library/bz6at95h%28v=vs.110%29.aspx it中
表示在指针的情况下,它引用原始的uncast指针。我想知道它引用了什么,以防非指针类型不引用任何变量。它只指示类型。所以目标类型是一个引用,那么我对吗?如果是,它是什么的参考?是否在内存中创建临时对象?我用指针尝试了这个方法,并声明它引用了原始的uncast指针。我想知道如果不发生意外会发生什么pointers@MistyD:它引用了作为强制转换参数的对象。我仍然不清楚当它声明为int b而不是int时,它如何引用某个对象&b@MistyD:强制转换生成一个非常量引用,该引用用于将值复制到b。b不是对a的引用,而是保存a副本的int变量。该代码中的强制转换是不必要的,甚至是令人困惑的,这就解释了这一点。我只是想确定是否涉及复制,所以目标类型是引用,那么我的回答正确吗?如果是,它是什么的参考?是否在内存中创建临时对象?我用指针尝试了这个方法,并声明它引用了原始的uncast指针。我想知道如果不发生意外会发生什么pointers@MistyD:它引用了作为强制转换参数的对象。我仍然不清楚当它声明为int b而不是int时,它如何引用某个对象&b@MistyD:强制转换生成一个非常量引用,该引用用于将值复制到b。b不是对a的引用,而是保存a副本的int变量。该代码中的强制转换是不必要的,甚至是令人困惑的,这就解释了这一点。我只是想确定这里面有抄袭