【发布时间】:2018-10-11 20:22:52
【问题描述】:
考虑一下这个 C 程序的 sn-p:
for(int i = 0; i < 5; i++)
{
int i = 10; // <- Note the local variable
printf("%d", i);
}
它编译没有任何错误,并且在执行时会给出以下输出:
1010101010
但是如果我用 C++ 写一个类似的循环:
for(int i = 0; i < 5; i++)
{
int i = 10;
std::cout << i;
}
编译失败并出现以下错误:
prog.cc:7:13: error: redeclaration of 'int i'
int i = 10;
^
prog.cc:5:13: note: 'int i' previously declared here
for(int i = 0; i < 5; i++)
^
为什么会这样?
【问题讨论】:
-
这应该是 C 还是 C++?
-
问题还不错。这完全取决于变量的范围以及它在 c 和 c++ 中的不同行为方式。
-
"在 C++ 中,init-statement 的范围和 statement 的范围是相同的,而在 C 中,statement 的范围嵌套在 init-statement 的范围内: ..." 参见引用下方的示例:en.cppreference.com/w/cpp/language/for
-
@Bob__ 您的编辑使问题得到 +9 :) 让我们保持原样。
-
问题在问什么非常清楚。投票重新开放。