use*_*239 9 c++ undefined-behavior language-lawyer
我无法在标准中找到该程序未定义的位置:
#include <iostream>
int main()
{
int *p;
{
int n = 45;
p = &n;
}
std::cout << *p;
}
Run Code Online (Sandbox Code Playgroud)
§3.8对象生命周期中的所有情况似乎都不适用于此处.
我不是100%肯定因为措辞,但看起来这是由3.8/6覆盖(我认为这种解释是正确的原因是因为3.8/5中的非规范性示例,// undefined behavior, lifetime of *pb has ended):
...在对象的生命周期结束之后,在重用或释放对象占用的存储之前,可以使用引用原始对象的任何glvalue,但只能以有限的方式使用....如果程序具有未定义的行为,则:
然后第一个子弹是罪魁祸首:: an lvalue-to-rvalue conversion (4.1) is applied to such a glvalue,这种转换必须在调用点operator<<或最终在读取整数值的位置进行,以便在ostream代码中进行格式化.
| 归档时间: |
|
| 查看次数: |
1079 次 |
| 最近记录: |