고려 다음과 같은 경우변수에 대한 로컬 별칭을 만드는 것이 오버 헤드를 추가합니까?
void func(const A& a)
{
//Case 1:
const int& val = a->b->c->d;
func1(val);
func2(val);
//Case 2:
func1(a->b->c->d);
func2(a->b->c->d);
//Case3:
int val = a->b->c->d;
func1(val);
func2(val);
}
w.r.t 가독성, Case3 괜찮은 컴파일러를 들어, 위의 모든 경우에 해당되며, 속도
w.r.t 가장 간단? 그들 중 어느 것이 가장 빠르지 않고 가장 느린가?
모든 포인터가 원시 포인터이고 힙의 개체를 가리키고 있다고 가정합니다.
업데이트 : 위의 그림과 같이 인수가 const
이라고 가정하면 func1과 func2는 값 또는 const 참조로 인수를 취할 수 있습니다. 두 기능을 가정
것을 분명히 볼 수 있습니다 그것은''func1'은'A'를 수정하는'A-> b' 가능,'A-> B-> c', 및/또는 경우이 세 가지 코드 조각은 실제로 비 해당 될 수 있음을 주목할 필요가 a-> b-> c-> d'. 그래서 컴파일러가 이들을 모두 동일한 코드로 최적화 할 수있는 유일한 방법은'func1'의 정의에 접근 할 수 있는지 아니면 함수 적으로 동등하다는 것을 어떻게 든 다르게 확인하는 것입니다. – ruakh
@ruakh'func1'은'd' 값만 전달하면'a','b' 또는'c'를 어떻게 수정합니까? –
@Dave : 아마도 'a'는 전역 변수입니다. A는 CONST를 만든 경우에도 –