【发布时间】:2015-02-25 19:01:37
【问题描述】:
我在标准中找不到该程序未定义的地方:
#include <iostream>
int main()
{
int *p;
{
int n = 45;
p = &n;
}
std::cout << *p;
}
§3.8 对象生命周期中的所有情况似乎都不适用于这里。
【问题讨论】:
-
我相信
p仍然会指向n所在的内存位置,但你无法知道那里会是什么。 -
@mstbaum 和这个问题有什么关系?
-
@remyabel (我之前删除的评论询问“无法预测结果”是否暗示 UB。)也许我不清楚什么是未定义的行为。我的推理可能与 mstbaum 的类似,因为我们不知道内存中的那个位置是什么,所以我们无法预测结果。这还不够吗?我是否需要在标准中查找才能确定?
-
@eigenchris 这些答案似乎都没有提到它是否是 UB(他们只是宣布它是或不是,没有证据)
-
@eigenchris 具有不确定值的对象具有不可预测的值。你会说这种行为是未定义的吗?不,因为标准规定了它。
标签: c++ language-lawyer undefined-behavior