【发布时间】:2020-07-03 10:48:55
【问题描述】:
我想知道在同一范围内有多个“常量引用”变量指向同一个对象是否会产生内存成本:
const Animal& animal = getAnimal();
const Dog& dog = static_cast<const Dog&>(animal);
从概念上讲,animal 和 dog 是两个变量,每个都是指针大小,因此会占用 2 个寄存器(或堆栈上的 2*指针大小区域)。
但是(假设没有多重继承等),编译器可以知道它们在整个生命周期中都必须保持相同的指针值。
那么,这两个变量可以共享一个寄存器(或堆栈上的一个指针大小的区域)吗?
我所说的“可以”是指:
- C++ 标准是否允许这样做?
- 现代编译器会这样做吗?
【问题讨论】:
-
"是两个变量,每个指针的大小"你怎么知道?我不知道有什么方法可以获取参考本身的大小
-
C++ 有“好像”规则。在某些限制条件下,只要程序的可观察行为没有改变,编译器就可以随心所欲地做任何事情。因此,C++ 标准当然允许编译器为两个引用共享一个位置(甚至完全消除两个引用)。编译器在实践中是否真的会这样做可能取决于许多不同的因素。
标签: c++ memory reference compiler-optimization