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
相关产品推荐
相关产品推荐

