此代码如何使用整数为您提供引用?
How does this code give you a reference using an integer?
我正在阅读这篇关于左值和右值的文章。 我不太明白这段代码:
int x;
int& getRef ()
{
return x;
}
getRef() = 4;
首先,return x
如何为您提供x
的参考? 不应该是像return addressof(x)
这样的东西吗?
第二,getRef() = 4
到底是做什么的? 这应该是作业吗? 我在这里不知所措。
虽然引用不是指针,但它们的行为通常很像指针,大多数使用引用的代码都可以使用指针编写。指针更灵活、更强大、更令人困惑和危险,因此通常最好使用引用,除非你真的需要指针。可以使用如下指针编写相同的代码:
int x;
int* getPtr ()
{
return &x; // return pointer to x
}
*(getPtr()) = 4; // assign value to what the pointer points to
为了进一步阅读,这个QA有一些好东西:何时使用引用与指针
return x
如何给你一个对 x 的引用
它这样做是因为它不是int getRef
,而是int& getRef
。您是对的,return x;
没有告诉我们是否返回引用可能会有点令人困惑。如果没有&
它将无法工作,并在getRef() = 4;
时给您一个编译时错误。
其次,getRef(( = 4 到底是做什么的?这应该是一个 分配?我在这里不知所措。
没错。它将4
分配给x
。这是有效的,因为引用是左值。
从代码质量的角度来看,这是一个相当粗糙的例子。
该函数返回对全局变量x
的引用(因为它被声明为返回引用,x 被传递以返回(
由于 Funktion 返回一个引用,你可以直接对返回值进行赋值,因为最后它类似于指针
相关文章:
- 未定义的引用 .. 使用 OpenCV 编译 C++ 代码时,从命令行
- Xcode 语义问题引用或以前定义的代码
- 如何编译使用循环引用的代码?
- 在这个函数中是有缺陷的,因为取消引用 null 是无效的,所以我想更改代码
- 如何在 c# 代码中通过引用调用时从 c++ dll 更新数组值?
- 为什么我的C++代码无法编译,出现未定义的引用错误
- 我的代码中C++未定义的引用错误?
- 为什么从 constexpr 引用生成的程序集代码与从 constexpr 指针生成的程序集代码不同?
- 为什么此代码片段有效?如何取消引用空点?
- Android NDK.Build命令失败.未定义的引用.clang++:错误:链接器命令失败,退出代码为1
- 在没有引用传递资源的情况下,如何在java中简化这些代码
- 使用 Android NDK 使用 clang++ 编译C++代码时对"_Unwind_Resume"的未定义引用
- LLvm Jit:如何从抖动代码中取消引用运行时指针?
- 当我使用按引用返回时,我不知道这些代码之间的区别
- 寻找有关为什么此C++代码在没有引用的情况下不起作用的解释
- 此代码中的右值引用在哪里?
- 对静态库中SDL_mixer函数的未定义引用(代码::块)
- GNU GCC:尝试编译发行版时对"WinMain@16"的未定义引用(代码::Blocks)
- 可移植可执行文件是否可以直接绝对引用代码段中的外部库,而不是通过 IAT
- 链接器错误:对“vtable for square”的未定义引用.代码包括虚拟函数