我不会透露名字的 C++ 编译器可以让你获取文字的地址 int *p = &42;
显然 42 是一个右值,大多数编译器拒绝这样做。
为什么编译器会允许这样做?除了搬起石头砸自己的脚之外,你还能做什么呢?
如果您需要一个指向值为 42 的整数的指针怎么办? :)
C++ 引用很像自动取消引用的指针。人们可以创建对文字的常量引用,如下所示:
const int &x = 42;
它实际上要求编译器使用值为 42 的整数的地址初始化指针,您随后可能会这样做:
const int *y = &x;
结合这一事实,编译器需要有逻辑来区分尚未获取地址的值和已获取地址的值,以便它知道将其存储在内存中。第一个不需要有内存位置,因为它可以完全是临时的并存储在寄存器中,或者可以通过优化来消除。获取值的地址可能会引入编译器无法跟踪的别名并抑制优化。因此,应用&
运算符可以将值(无论它是什么)强制写入内存。
因此,您可能发现了一个结合了这两种效果的错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)