编译或执行打破语言规则的程序的不可预测的结果,编译器,解释器和运行时系统都不得强制执行。
有符号 int 上溢-下溢会导致未定义的行为,但编译器如何预测这种情况?
有符号 int 算术运算可能会溢出和下溢,当发生这种情况时,根据 C++ 标准(和 C 标准),这是未定义的行为。届时该计划预计...
当目标类型无法保存结果值时,@intCast() 会导致未定义的行为。是否有类似 @safeIntCast() 或类似的函数会返回 CastError!anytype?
是否是未定义行为(UB): 0 << 32 0LL << 64 ? I would appreciate it if the answer includes references to the C standard.
在 C++20 中模拟 std::start_lifetime_as_array
根据cppreference,目前没有编译器支持std::start_lifetime_as_array。 然而,SO 答案表明它可以在 C++20 中“模拟”,如下所示: 模板
给出以下包装(简化): 模板 类包装器 { 公共:自动 val() { 返回 t; } 私人:T t; }; 我正在尝试获取一系列包装纸来
我正在使用嵌套的稀疏指针数组,并希望概括每个级别的指针的分配和初始化。 我决定使用 for 循环来迭代每个级别,但是......
是否将“指向结构体的指针的地址”转换为“第一个成员是指向结构体的指针的结构体的地址”UB?
我有一个名为 Node 的结构,其第一个成员是 Node* p_next 我有一个指向第一个节点的指针,名为 p_head 我想将 Node** 类型的 &p_head 转换为 Node*,并将其存储在
理想情况下,我想要这样的东西: 结构体S{ // ... 联盟{ 无效*ptr; 字符缓冲区[]; }; }; 也就是说,具有指向外部存储的指针或
我有两个类,它们在自己的标头中独立声明,并在自己的 TU /.cpp 中定义了它们的方法。 这些类在名称和命名空间方面是相同的,但存在于
为什么 C++20 中由于计算而导致的有符号溢出仍然是未定义的行为
通过这个答案我了解到: 由于计算而导致的有符号溢出在 C++20 中仍然是未定义的行为,而由于转换而导致的有符号溢出在 C++20 中得到了很好的定义(这是实现...
为什么整数溢出未定义行为仅适用于有符号整数,而不适用于无符号整数?
使有符号整数溢出未定义行为的目的是允许编译器优化。但这不是一个与
reinterpret_cast从char*到uint32_t*在CPP中是未定义的行为吗?
我从事一个中型开源项目,该项目需要将原始字节解释为不同类型。这是通过创造性地使用重新解释铸造来实现的。然而,在一个简单的测试用例中,comp...
为什么这个 std::weak_ptr 明显阻止释放内存,以及如何检测这个错误?
在我的 C++ 代码中,我有一个 std::shared_ptr 超出了范围,这将其使用计数减少到 0,因此指向的对象被销毁。这很好用。但是,如果我有一个 std::weak_ptr 那个 poi...
我正在阅读 std::launder 的文档,我遇到了这个代码片段: int x2[2][10]; 自动 p2 = std::launder(reinterpret_cast(&x2[0][0])); // 未定义的行为:x2[1] w...
我知道以下C语言代码: (1 << 31) is considered Undefined Behavior due to the C standard (6.5.3 Shift Operators): The result of the shift operation is undefined if the right op...
std::views::chunk、std::views::transform、输入范围和格式错误
考虑方案1: #包括 #包括 #包括 #包括 int main() { std::istringstream iss{"\x{01}\x{02}\x{03}\x{04}&quo...
我正在审查我建议在编译时为非默认可构造对象初始化 std::array 的代码:https://stackoverflow.com/a/78676552/21691539 在第二个版本中我正在做: //
我想要一个具有公共只读访问权限并且可以在私有上下文中编辑的类变量。 在之前的 Stackoverflow Question 中,描述了使用 const 引用。 然而...
为什么编译器会优化 `g` 以始终返回 true,即使 `i == INT_MAX` 避免了未定义的行为?
在 CppCon 的这个示例中: bool f(int i) { 返回 i + 1 > i; } 布尔 g(int i) { if (i == INT_MAX) 返回 false; 否则返回f(i); } 编译器优化 f 使其始终返回 true,因为...
假设我们有一个指针 p,类型为 volatile int*。假设这是一个当前有效的指针,即从 *p 读取执行执行定义的操作,并且不是 UB。 会发生什么...