所有的临时分配都有唯一的地址吗?

在阅读有关 C++20 中 constexpr 新支持的 C++ Weekly视频的评论时,我发现该评论声称 C++20 允许在 constexpr 上下文中使用 UB。

起初我相信评论是正确的,但我越想越多,我开始怀疑 C++20 的措辞包含一些聪明的语言来实现这种定义的行为。

要么所有的临时分配都返回唯一的地址,或者可能是 C++ 中的一些更一般的概念,这使得 2 个不同的分配指针总是(即使在 nonconstexpr 上下文中)比较假,即使在实际运行时分配器可能会给你相同的地址(因为您删除了第一个分配)。

作为奖励的奇怪之处:您只能==用于比较<>失败...

这是在 constexpr 中涉嫌 UB 的程序:

#include <iostream>
static constexpr bool f()
{
    auto p = new int(1);
    delete p;    
    auto q = new int(2);
    
    delete q;
            
    return p == q;
}
int main()
{
    constexpr bool res1 = f();
    
    std::cout << res1 << std::endl; // May output 0 or 1
}

神箭

以上是所有的临时分配都有唯一的地址吗?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>