Ed *_*man 117 c++ scope for-loop
我遇到过这种for循环布局:
#include <iostream>
int main()
{
{
for (int i = 0; i != 10; ++i)
{
std::cout << "delete i->second;" << std::endl;
}
}
{
for (size_t i = 0; i < 20; ++i)
{
std::cout << "delete m_indices[i];" << std::endl;
}
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我想知道这个额外的支撑层是什么用的?这在我们的代码库中出现了几次.
UKM*_*key 286
曾几何时,很多时候,VS6已经存在并且很受欢迎.然而,它未能符合许多C++标准; 当标准正式发布之前(同年)发布时,这是合理的; 但据我所知,它确实遵守了标准草案.
草案与官方标准之间发生变化的标准之一是第一部分中创建的for循环变量的生命周期; 导致以下代码无法编译
{
for (int i=0; i<1; ++i){}
for (int i=0; i<2; ++i){}
}
Run Code Online (Sandbox Code Playgroud)
因为i第二个for循环重新定义了.
而其他编译器也遇到了这个错误; 我强调了VS6的一个,因为它在标准发布后的若干年中仍然是唯一的Visual Studio版本,但从未发布过针对此特定问题的更新; 意味着它产生了更重大的影响.
对此的解决方案是强制整个for循环进入其自己的范围,如您所示.
cok*_*ken 15
{并且}将创建一个范围,如果在范围定义一些变量,你不能从外部访问它们.但for已经创造了这个范围.所以
{for(int i = 0; i < count; ++i){}}
Run Code Online (Sandbox Code Playgroud)
是相同的
for(int i = 0; i < count; ++i){}
Run Code Online (Sandbox Code Playgroud)
但如果你在它们之间定义一些东西,那就有区别了
{int a = 0; for(int i = 0; i < count; ++i){}}
Run Code Online (Sandbox Code Playgroud)
在此示例中,a将无法从外部范围访问.
| 归档时间: |
|
| 查看次数: |
8944 次 |
| 最近记录: |