【问题标题】:How C++ alias works? [duplicate]C++ 别名如何工作? [复制]
【发布时间】:2021-11-26 23:17:50
【问题描述】:

别名在 C++ 内部是如何工作的?
它是否像指针一样分配自己的内存?
不然编译器怎么处理?
是不是像 C++ 宏预处理器计算?

int x=5;
int &y=x; //Assembly of this???

【问题讨论】:

  • 这是 C++ 独有的特性,C 没有引用类型
  • 它的工作方式取决于实现。此外,引用变量的实现方式可能与引用参数和函数不同,因为后者从一个调用变为下一个调用。
  • 最好的理解方式就是亲眼所见。在很多调试器(包括Visual Studio)中,当你遇到断点时,你可以打开“查看程序集”视图,在那里你可以看到汇编代码。
  • 您也可以使用godbolt.org查看程序集。
  • 本地引用可能就像一个宏,编译器只是自动翻译它。引用参数可能实现为隐藏指针。

标签: c++ alias compiler-optimization


【解决方案1】:

那些被称为引用。

该标准没有描述它们(或其他任何东西)如何在装配级别上工作。

实际上,它们是作为指针实现的,除非编译器将它们优化掉(与指针相比,引用更容易,因为它们不能被重新分配)。

它们与宏无关,预处理器不知道引用。

该标准包含一些有趣的引用措辞:它们“不是对象”,结果是您无法合法地有意义地检查它们的内存布局并对其进行修改。但这主要是措辞的一个特点。在大多数情况下,它们就像不可变指针一样工作。

【讨论】:

    猜你喜欢
    • 2019-07-25
    • 1970-01-01
    • 1970-01-01
    • 2012-02-29
    • 2012-04-09
    • 1970-01-01
    • 2020-06-07
    • 2014-02-20
    • 2016-06-28
    相关资源
    最近更新 更多