c++ - 在封闭范围内重新声明变量是未定义的行为吗?
问题描述
#include <iostream>
using namespace std;
int main() {
int i = 0;
if(true) {
int i = 5;
cout << i << '\n';
}
return 0;
}
尝试在 Ideone 上运行上述代码以查看其是否合法。结果让我感到困惑:
正如您从我的链接中看到的那样,每次在 Ideone 上编译相同的代码时,它的行为都完全不同!这闻起来像未定义的行为 (UB)。
OK C++ 以其不直观的行为而闻名,但是!- 我承认这只是我的直觉,但我不希望 C++ 在内部范围 UB 中重新声明一个变量!我期望阴影或强制编译错误。
根据 C++ 标准,我的代码真的是 UB,还是只是 Ideone 和/或 gcc 的特性?如果是 UB,是因为我重新声明了 UB,还是由于i
其他原因我现在没有注意到?
解决方案
在封闭范围内重新声明变量是否是UB?
不它不是。
i
您看到的编译器错误很可能是由外部已声明但未使用的事实引起的。
否则,您的代码就可以了。
它在https://ideone.com/AwVJqZ以及我的桌面上对我来说都很好。
推荐阅读
- php - 将 2.2.6 升级到 2.3.4 - 后端工作但前端页面为空白
- laravel - 我们如何在 Laravel Eloquent 中不使用 select 为子表列的名称取别名
- google-drive-api - 如何使用 C# 从 Google Drive 下载二进制文件
- javascript - 多边形上的边界线
- c++ - 如何为模板参数创建模板特化
- python - 指定主机时 FastAPI/uvicorn 不起作用
- angular-material - 为什么有些角度材质颜色输入有颜色输入,而另一些则没有?
- python - 尝试迭代采样,同时提供对所有先前采样步骤的访问
- c# - 添加项目引用和 nuget 提要时 Docker 构建失败
- c# - 用于映射表的 ASP.NET Core 导航属性