gpt4 book ai didi

c++ - 为什么某些 C++ 编译器允许您获取文字的地址?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:26:05 27 4
gpt4 key购买 nike

一个我不会说出名字的 C++ 编译器让你获取文字的地址,int *p = &42;

显然 42 是一个 r 值,大多数编译器拒绝这样做。

为什么编译器会允许这样做?除了搬起石头砸自己的脚,你还能用它做什么?

最佳答案

如果您需要一个指向值为 42 的整数的指针怎么办? :)

C++ 引用很像自动解除引用的指针。可以创建对文字的常量引用,如下所示:

const int &x = 42;

它实际上要求编译器用值为 42 的整数地址初始化一个指针,您随后可能会这样做:

const int *y = &x;

结合这一点,编译器需要有逻辑来区分一个值没有被取地址,一个已经取地址,所以它知道将它存储在内存中。第一个不需要内存位置,因为它可以完全是临时的并存储在寄存器中,或者可以通过优化将其消除。获取值的地址可能会引入编译器无法跟踪并禁止优化的别名。因此,应用 & 运算符可能会强制将值(无论它是什么)存入内存。

因此,您可能发现了一个结合了这两种影响的错误。

关于c++ - 为什么某些 C++ 编译器允许您获取文字的地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1166378/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com