2012-09-27 2 views
-2

C++ faq에서 "지역을 처음 사용할 때 근처에 선언해야합니다"라는 내용을 읽었습니다. 또한 Scott Meyer의 Effective C++ Item 26은 성능상의 이유로 그것을 제안합니다. 그러나 나는 최근에 컴파일러가 함수 내에서 실제로 사용되는 범위에 관계없이 정의 된 곳에서 변수를 최적화 할만큼 똑똑하다는 것을 누군가로부터 듣게되었습니다. 그리고 그는 이해의 용이성을 위해 함수의 맨 위에 변수를 선언 할 것을 제안합니다 (저는이 이유를 사지 않습니다). 그는 컴파일러 최적화에 관한 올바른가요?변수 선언 위치에 대한 컴파일러 최적화

(성능 및 컴파일러 최적화에 관한 질문입니다. 코드 가독성이 없음).

+2

FAQ에서 얻은 충고는 가독성을 높이는 데 있습니다. 그것은 컴파일러가 아니라 인간의 이익을위한 것입니다. – sashang

+0

기다림 - 필요한 장소는 무엇입니까? – Puppy

+0

@DeadMG이 (가) 질문을 편집했습니다. 지금 그 희망을 바란다. –

답변

2

예, 충분히 똑똑합니다.

그러나 소프트웨어 기술 답변도 있습니다. 더 나은 프로그래밍 스타일이기 때문에해야합니다.

0

변수가 사용되는 곳 근처에 변수 선언을두면 지역성이 높아 지므로 코드와 프로그램 흐름을 더 쉽게 이해할 수 있습니다. 또한 변수가 중첩 된 범위에 배치되면 선언 된 범위를 벗어날 때 "파괴"되어 RAII와 같은 작업을 돕습니다.

4

컴파일러는 아무 관계가 없습니다. 변수 정의 (로컬 또는 기타)와 관련하여 두 가지 일반 규칙 이 있습니다. 범위를 유지하고 가시성을 가능한 한 작게 유지하고 가능하면 정의 으로 초기화하십시오. 이 규칙은 컴파일러가 아닌 인간 독자를위한 것입니다. 둘 다 결과로 "처음 사용하는 지역 주민들을 선포합니다"로 이어집니다.

+0

더 많은 지역 범위 (즉, 함수 내의 내부 코드 블록)에 선언 된 변수 (생성자/소멸자 포함)에 성능상의 이점이 없다는 뜻입니까? 컴파일러는 함수 블록의 맨 위에 선언 된 경우에도 내부 코드 블록 내에서 생성자를 지능적으로 호출합니까? –

+0

@nariknahom 컴파일러는 생성자 또는 소멸자가 호출되는 위치를 변경할 수 없습니다. 이것은 언어에 의해 정의됩니다. 일반적으로 (그러나 RAII가 관련된 경우 특히 예외가 있지만) 실제적인 차이는 없습니다. ('scoped_lock'와 같은 것으로, 소멸자가 호출되는 곳에서 컴파일러를 바꾸기를 정말로 원하지 않습니까?) –

0

항상 이해하기 쉽고 이해하기 쉬운 소스 코드를 작성해야합니다.

컴파일러가 이것을 최적화 할 수 있다고하더라도 여전히 그렇게하는 것이 좋습니다. 향상된 가독 성을 제공합니다. 블록 시작 부분에서 변수가 초기화 된 값을 캐시하고 기억할 필요가 없습니다.