You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++标准中哪一子条款禁止同一块内重复声明/定义变量?

关于C++标准中变量重声明的条款疑问

我正在阅读《C++编程语言标准》(版本n4868),找不到禁止以下无法编译代码的具体子条款:

/* Code A */
int main() {
  int i;
  int i;
}

而以下代码可以正常编译:

/* Code B */
int main() {
  int i;
  { int i; }
}

我找到了一些相关条款,但无法匹配我的疑问:

[basic.def.odr#1]:任何翻译单元都不得包含任何变量的多个定义...
若适用此条款,我找不到解释为何Code B中的两个i不是同一变量,而Code A中是同一变量的子条款。

[basic.scope.block#1]:在块([stmt.block])中声明的名称是该块的局部名称;它具有块作用域。其潜在作用域从声明点([basic.scope.pdecl])开始,到块结束时终止。在块作用域中声明的变量是局部变量。

实际上我尝试寻找类似或更通用的条款,比如像[temp.local#6]那样明确说明“块作用域的变量名称不得在其潜在作用域内重新声明(嵌套块除外)”的规则,但未找到:

[temp.local#6]:模板参数的名称不得在其作用域(包括嵌套作用域)内重新声明。...

恳请提供帮助,谢谢!


内容的提问来源于stack exchange,提问作者XuanInsr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 06:30:53