2010-08-07 6 views
1

사용자 정의 유형의 경우 적절한 초기화 코드를 사용할 수있을 때까지 변수의 정의를 연기하면 성능이 향상 될 수 있습니다. 왜?값에 대한 초기화가 성능에서 할당과 어떻게 비교됩니까?

+0

코드가 훨씬 간결하고 깨끗해 졌기 때문에 그렇게 할 것입니다. 변수를 정의한 다음 나중에 사용할 때까지 사용하지 않는 것이 좋습니다. – GManNickG

+0

@GMan : 그것은 또 다른 좋은 지적입니다. 변수 사용 범위가 작을수록 코드를 쉽게 따라갈 수 있습니다. –

답변

1

특히 사용자 정의 유형의 경우 생성자와 설정 방법이 임의로 복잡하고 시간이 오래 걸릴 수 있습니다. 스티븐의 예를 촬영 :

X x; // Calls X() 
x.Set(42); 

X x(42); // Calls X(int) 

...는 X의 구현 : X()와 X : 설정() 수도 모두 될 매우 당신이 읽었 이유의 시간이 소요 및 후자는 더 나은 성능을 가질 수 있습니다.

3

기본 생성자 이외의 생성자가 호출되기 때문에.

X x; // Calls X() 
x.Set(42); 

X x(42); // Calls X(int) 
+0

좀 더 복잡한 경우를 제외하고는 성능 차이를 많이 볼 수 있을지 의심 스럽습니다. – GManNickG

+0

@GMan : 사실, 더 심각한 문제는 * 초기화 만 할 수 * 할당 할 수없는 클래스입니다. 이러한 불변 클래스는 병렬 처리의 증가로 인해 늦은 시각에 훨씬 더 많이 보편화되었습니다. –

+0

하지만 성능면 에선 유용성이 아닙니다. :) – GManNickG

1

당신은 적절한 초기화 데이터를 사용할 때 초기화 호출 다음에 불필요한 생성자를 실행하지 마십시오. 그리고 코드 경로가 초기화 브랜치에 도달하지 못하면 생성자와 소멸자를 모두 피할 수 있고 unwinding을위한 예외 처리 상태 설정을 피할 수 있습니다.

+0

좋은 지적. 얼마나 많은 변수를 맨 위에 선언하고 매개 변수가 null이기 때문에 즉시 종료하는 함수를 보았습니까? (수사학적인 질문) –

3

문자열 클래스를 고려하십시오. 우리가 말하는 경우 :

다음에 우리는 s의 구성에서 몇 가지 작업을 수행해야하며, 할당 작업에서 더 많은 또는 적은 작업을 반복해야합니다. 우리가하는 경우 :

string s("foobar"); 

우리는 한 번만 작업을합니다.

C++을 배워야 할 때 이 아니어야합니다.은 결코 성능 문제에 관심이 없습니다. 명확하고 이해하기 쉬운 코드 만 쓰면됩니다. 그리고이 경우 변수를 항상 초기화하면 값으로 초기화하는 것이 더 명확 해집니다.

그리고 BTW는 언어를 C++이라고 부릅니다 - cpp는 C 전처리 기입니다.

+0

역설적이게도 C++의 첫 번째 구현은 C 로의 번역자였습니다. 본질적으로 단지 전처리 기일뿐입니다. :-) –

+0

@Steven 아닙니다. 저는 그것을 사용했습니다. 이것은 타겟 언어로서 C를 방출하는 컴파일러 (번역자 또는 프리 프로세서가 아닙니다)였습니다. 나는이 신화가 죽었 으면 좋겠다. –

+0

@Neil - 알아두면 재미 있습니다. 필자의 경우 C++에 대한 첫 경험은 CFront (http : //en.wikipedia.org/wiki/Cfront) 그리고 저는 그것이 실제로 전처리 기 였다고 믿습니다. –

관련 문제