我仍然无法准确指出未定义行为的实际定义级别。假定以下代码:
int i = value;
unsigned int x = static_cast<unsigned int>(i);
这是有效的C ++代码,例如i
是1
。但是在i = -1
上,它变成未定义的行为,因此应用程序在运行时处于UB状态。
在编译期间,UB下面的代码示例已经显而易见。所以我的问题是,UB可以在编译时还是在运行时都正确吗?正确的术语是什么?
void foo(int* p)
{
int v = *p;
if (p == nullptr)
return;
}