运行此操作时为什么会出错?我期待ptr_ref无法修改ptr指向的地址,但事情似乎没有按计划进行。
int b = 3;
int* ptr = &b;
//says something about cannot convert int* to type const int*&
const int*& ptr_ref = ptr;
提前致谢, 15岁的C ++ noob
答案 0 :(得分:10)
ptr_ref
不是const
指向int
的引用,而是对指向const int
的引用,因此您的类型不匹配。你必须这样做
int* const& ptr_ref = ptr;
答案 1 :(得分:3)
问题是类型不匹配,因此您无法创建引用。
int b = 3;
int* ptr = &b;
int*& ptr_ref = ptr;
合法。
int b = 3;
const int* ptr = &b;
const int*& ptr_ref = ptr;
合法。
int b = 3;
int* ptr = &b;
const int*& ptr_ref = ptr;
是不匹配。
G ++的错误信息可能对您有所帮助:
error: invalid initialization of non-const reference of type 'const int*&' from an rvalue of type 'const int*'
const int*& ptr_ref = ptr;
^
本质上意味着,它必须为此表达式创建一个const int*
,这是一个rvalue(本质上是一个临时对象),因此你不能保持对它的引用它。一个更简单的方法是,你不能做你写的东西,原因同样是非法的:
int& added = 3 + 2;
根据您的具体情况,您可以通过删除参考标记来解决此问题。大多数编译器会在有或没有它的情况下输出相同的汇编,至少在优化时,由于它们能够找出变量名只是别名这一事实。
甚至有些情况references can perform worse,根据你的意图,可能值得知道 - 当我发现时,我很惊讶地知道它。
答案 2 :(得分:-3)
引用本质上是const,因此将它定义为int *& const ptr_ref = ptr
没有任何意义
当你谈到const引用时,它通常意味着对const的引用,这是你在问题中使用的定义。
[编辑]编辑我的答案,因为我错误地将const放在&符号的错误一边--C ++不会原谅你[/ edit]