자체 중괄호 내부의 루프
이 for-loop 레이아웃을 보았습니다.
#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;
}
이 중괄호의 추가 레이어가 무엇인지 궁금합니다. 이것은 코드베이스에 몇 번 나타납니다.
옛날 옛적에 여러 달 전에 VS6가 존재했으며 인기가있었습니다. 그러나 여러 C ++ 표준을 준수하지 못했습니다. 표준이 공식적으로 발표되기 직전에 (같은 해에) 발표 될 당시 합리적이었다. 그러나 내가 아는 한 표준 초안을 준수했습니다.
초안과 공식 표준 사이에서 변경된 표준 중 하나는 첫 번째 섹션에서 생성 된 for 루프 변수의 수명이었습니다. 다음 코드를 컴파일하지 못했습니다.
{
for (int i=0; i<1; ++i){}
for (int i=0; i<2; ++i){}
}
i두 번째 for 루프에 의해 재정의 되었기 때문 입니다.
다른 컴파일러들도이 버그를 겪었습니다. VS6 버전은 표준 출시 후 몇 년 동안 유일한 Visual Studio 버전으로 유지되었지만이 특정 문제에 대한 업데이트를 발표하지 않았기 때문에 VS6 버전을 강조합니다. 더 큰 영향을 미쳤다는 의미입니다.
이에 대한 해결책은 표시된대로 전체 for 루프를 자체 범위로 강제하는 것입니다.
{및 }범위를 작성하고 당신이 범위에 일부 변수를 정의하는 경우는 외부에서 액세스 할 수 없습니다. 그러나 for이미 해당 범위를 만듭니다. 그래서
{for(int i = 0; i < count; ++i){}}
와 같다
for(int i = 0; i < count; ++i){}
그러나 당신이 그들 사이에 무언가를 정의하면 차이가 있습니다
{int a = 0; for(int i = 0; i < count; ++i){}}
이 예에서는 a외부 범위에서 액세스 할 수 없습니다.
당신의 특별한 예에서는 그들에 대한 이유가 없습니다.
때로는 변수의 범위를 만들고 싶을 수도 있습니다.
float average;
// ...
{
int sum = 0;
for (int i = 0; i < count; ++i)
{
sum += v[i];
}
average = (float)sum / count;
}
// use average
// sum not in scope here
However I see this an anti-pattern. Usually if you find yourself in need of doing this then most likely the for should be its own function.
It's a block scope marked by {} braces. It is usually used to mark the area of automatic storage. In your case it doesn't seem to do anything as the for loop has its own scope in standard C++.
참고URL : https://stackoverflow.com/questions/49447957/for-loop-inside-its-own-curly-braces
'IT story' 카테고리의 다른 글
| Azure Blob Storage 및 파일 서비스 (0) | 2020.07.19 |
|---|---|
| Xml 직렬화-null 값 숨기기 (0) | 2020.07.18 |
| Android 스위치의 스타일을 어떻게 지정할 수 있습니까? (0) | 2020.07.18 |
| MySQL 뷰 목록을 얻는 방법? (0) | 2020.07.18 |
| int 숫자의 별도 숫자를 얻는 방법? (0) | 2020.07.18 |