- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在阅读 C++ 周刊评论时 video关于 C++20 中的 constexpr 新支持,我发现了一条评论,声称 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
}
godbolt
最佳答案
这里的结果是实现定义的。 res1
根据实现想要如何定义它,可能是假的、真的或格式错误的。这对于等式比较和关系比较都是一样的。
两者 [expr.eq] (为了平等)和 [expr.rel] (对于关系)首先对指针进行左值到右值的转换(因为我们必须实际读取值来进行比较)。 [conv.lval]/3说转换的结果是:
Otherwise, if the object to which the glvalue refers contains an invalid pointer value ([basic.stc.dynamic.deallocation], [basic.stc.dynamic.safety]), the behavior is implementation-defined.
When the end of the duration of a region of storage is reached, the values of all pointers representing the address of any part of that region of storage become invalid pointer values. Indirection through an invalid pointer value and passing an invalid pointer value to a deallocation function have undefined behavior. Any other use of an invalid pointer value has implementation-defined behavior.
Some implementations might define that copying an invalid pointer value causes a system-generated runtime fault.
p < q
,似乎 gcc 和 clang 拒绝比较,因为它不是常量表达式(这是...允许的结果),而 msvc 认为两者都是
p < q
和
p > q
为常量表达式,其值为
false
(这也是......也是允许的结果)。
关于c++ - 所有的临时分配都有唯一的地址吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66789487/
我知道我应该指定 argtypes对于我的 C/C++ 函数,因为我的某些调用会导致堆栈损坏。 myCfunc.argtypes = [ct.c_void_p, ct.POINTER(ct.c
我正在从 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators 学习 Itera
在我的数据库中,我有一个类别表。类别可以有父类别,使其成为递归关系 我还有一个产品表。每个产品都属于一个类别。 例如,我有一棵树,如下所示: Category Sub-Category 1
定义列表要求每个 会有标签? 例子: option1 每个 存在他的如果 空: value1 name2 value2 选项 2 每个 不存在他的如果空: value1 name2 value
我制作了一个脚本,它在开始时检查操作系统版本。 它读取/etc/os-release 文件,并检查操作系统是否为 CentOS 7。 但我不确定我是否可以确保每个 CentOS 7 都有那个文件。 其
我一直在使用 webapi 设置一个 mvc 项目。我可以正常工作,但我不知道为什么我的 GET 调用的 URL 中有附加部分。 示例: /api/User/Zholen?_=137349028082
我创建了具有 ACTIVE BOOL 的基类 class BaseTest{ public: bool active = false; BaseTest(){ // make
.parent { background-color: yellow; display: flex; justify-content: space-evenly; } .parent >
完整的错误是: AttributeError: Neither 'ColumnClause' object nor 'Comparator' object has an attribute 'desc
我的 GUI 中有一些功能可以随着时间的推移更新给定的文本组件。理想情况下,我希望它接受任何具有 getText/setText 方法的内容。使用 JTextField 和 JTextPane 可以轻
我是一名优秀的程序员,十分优秀!