c++ - 赋值后引用和变量之间有什么实际区别吗?

标签 c++ variables pointers reference

我的理解是,引用基本上是一个指针,其值不会改变,并且始终被取消引用。所以如果我有代码

int& thisIsAReference = someVariable;

然后基本上创建一个指向 someVariable 位置的指针,并且该指针永远不能指向另一个位置并且总是被取消引用。

不过那好像和变量一样。据我了解,变量指的是特定的内存位置,不能指代不同的内存位置,而是隐式指代某个位置的值而不是位置本身。

那么,除了声明的语法不同之外,thisIsAReferencesomeVariable 之间还有什么区别吗?

最佳答案

是的,你完全正确。在概念层面,您可以将引用视为同一变量的另一个名称(如 Stroustrup 在 TC++PL 中所说)。反之亦然:您可以将任何变量视为变相的引用 - 名称实际上属于引用,它绑定(bind)到相同的未命名存储区域。

然而,这就是它在概念层面上的样子。

在实践中可能完全不同。从实际的角度来看,在一般情况下,引用在底层是作为指针实现的。这意味着通过引用访问需要隐式运行时取消引用该指针。这使得引用访问比“普通”直接变量访问执行得更慢。

然而,在许多情况下,编译器可能足够聪明,可以找出引用绑定(bind)到什么,并消除指针解引用,将其替换为直接访问目标变量。在这种情况下,上述概念(“引用只是变量的另一个名称”)在实践中得到了充分实现。

关于c++ - 赋值后引用和变量之间有什么实际区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35925477/

相关文章:

python - 在 python 中使用类变量作为非默认参数

c++ - 返回对本地取消引用指针的引用

不使用移位将数组中的连续字节转换为指针

c++ - 如何使用 Item Delegate 检测 QListView <-> QAbstractListModel 中的行选择?

c++ - 当我迭代它时,我可以从 std::list 中删除元素吗?

java - 将用户输入中的多个变量放入数组列表中

c - 在文件中间添加字符而不覆盖C中现有的字符

将 Eigen::VectorXd 转换为 Eigen::MatrixXd 的 C++ lambda 函数

c++ - 递归类头包括

python - 如何在maya中使用python在函数之间传递变量?