"reference can never be made to refer to another object"是什么意思?
What does "reference can never be made to refer to another object" mean?
我读过关于C++引用变量的文章,在某个地方我发现了这一点:
const引用的声明是多余的,因为引用永远不能用来引用另一个对象。
这是什么意思?
例如,在这里,我可以更改引用所指的对象:
void p(int& i) {
int a = 7,c = 0;
i = a;
}
那么,"引用永远不能用来引用另一个对象"是什么意思呢?
提前谢谢。
这意味着,给定此代码
int a;
int b;
int& ref = a;
一旦初始化ref
以引用a
,就无法使其引用b
或任何其他变量。
对引用所做的任何更改都将反映用于初始化它的变量。引用(它本身甚至不是一个合适的对象)保持不变。
此外,引用只有在引用的对象保持活动状态时才可用。
设想它的最简单方法是用指针来表示:
// reference // equivalent pointer code
int& r = a; int* const r = &a;
r = b; *r = b;
function(r); function(*r);
也就是说,在声明时,引用声明了现有对象内存位置的别名。然后,引用的任何使用都相当于取消引用指向该内存位置的指针。
现在,常量引用是什么?好吧:
// reference // equivalent pointer code
int& const r = a; int* const const r = &a;
int const& const r = a; int const* const const r = &a;
这使得冗余非常明显,我相信。
在您的示例中,您没有更改i
所指向的内容,而是将i
的VALUE更改为a
的值。如果你在哪里显示i
的地址,你会发现它与a
不同。
如果执行int &r = x;
,这意味着r
指的是x
,并且每次更改r
时,实际上都更改了x
。同样,每次更改x
时,都可以通过r
看到该更改。
现在,"引用永远不能用来引用另一个对象"的意思是,一旦你做了int &r =x
,你就不能让r
引用y
。您可以执行r = y;
,但只需将x
设置为等于y
即可。这并不意味着之后改变r
将改变y
,也不意味着对y
的改变将通过r
可见。
相关文章:
- 当覆盖存在时调用基本虚拟"binded to object"函数
- "Unable to start debugging. No process is associated with this object." - 在Visual Studio Code中使用GDB
- "Cannot convert Python object argument to type '<typename>'" - 使用 Cython 包装 C++ 类时出错
- C++线程"Call to non-static member function without an object argument"
- dopen():不以 root 身份运行时"failed to map segment from shared object"
- 当两个成员位于同一类中时出错"a nonstatic member reference must be relative to a specific object"
- Nan::ObjectWrap to Napi::Object Wrap 无法访问 JavaScript 中的属性
- 指向对象生存期之外的已分配内存的指针是"invalid pointer[s]"还是"pointer[s] to an object"?
- 如何解决访问不同功能的"nonstatic member reference must be relative to a specific object"
- C++ 中数组的"expression must have pointer-to-object type"是什么?
- libgit2:git_clone() 失败并出现"failed to create ssl object"错误
- 自 C++17 以来使用 std::launder "validate"非"pointer to object"指针值
- 为什么不触发"returning reference to temporary object"编译器警告?
- 收到"void* is not a pointer-to-object type"错误,但使用 XCode 时代码完美执行
- "A reference may be bound only to an object",为什么"const int &ref = 3;"有效?
- C++常见问题 32.8 "pass an object of a C++ class to/from a C function"问题
- 在C++,我收到一条消息"error: 'void*' is not a pointer-to-object type"
- C++:重载"pointer to object" * 运算符
- 没有合适的转换函数来自 std::vector<Object *, std::分配器<Object *>> " to " Object *"
- "'void*' is not a pointer-to-object type"没有空白*的代码?