首页 > 解决方案 > 编译时和运行时未定义的行为

问题描述

我仍然无法准确指出实际定义了哪个级别的未定义行为。假设以下代码:

int i = value;
unsigned int x = static_cast<unsigned int>(i);

这是有效的 C++ 代码并在例如iis时定义1。但是i = -1它变成了未定义的行为,因此应用程序在运行时处于 UB 状态。

在下面的代码示例中,UB 在编译时已经很明显了。所以我的问题是,UB 可以在编译时或运行时是正确的吗?这里的正确术语是什么?

void foo(int* p)
{
    int v = *p;
    if (p == nullptr)
        return;
}

标签: c++undefined-behavior

解决方案


推荐阅读