2014-09-14 1 views
-2

C++의 const 할당은 참조에 의해 암시 적으로 수행됩니까? 이 경우, 예를 들어, 중복 앨리어싱이 명시 적으로 만드는 것입니다 :C++ : 왼쪽 const 할당에 참조/별칭 (&)을 중복 추가합니까?

const std::vector<unsigned>& chart = chartData.at(id); 

즉, 단순히이 동일합니다 :

const std::vector<unsigned> chart = chartData.at(id); 
+5

아니요, 하나는 참조를 만들고 다른 하나는 참조를 만들지 않습니다. –

+0

컴파일러가 const이므로 할당을 참조로 최적화하지 않는 이유는 무엇입니까? chartData.at (id) – daj

+1

을 돌연변이시킬 차트에는 할 수있는 것이 없어야합니다. 코드에 "할당"이 없습니다. –

답변

0

코드 두 개가 동일하지 않습니다. 고려 :

int value{1}; 
int const& a{value}; 
int const b{value}; 

++value; 
std::cout << a << ' ' << b << '\n'; 

Running code

는 확실히 우리는 이것이 "최적화"를 수용 할 수없는 점에 동의 할 수 있습니까?

참고로 참조를 통한 액세스는 값에 대한 액세스보다 비효율적 일 수 있습니다. 그 이유는 참조가 일부 기준에서 추가 참조 연산을 발생시킬 것이기 때문입니다.

2

우리는 당신이 예제 무슨 말을하는지 이해하려고 노력하자

#include <iostream> 

int main() 
{ 
    int value = 10; 
    const int& char1 = value; 
    const int chart2 = value; 
    cout << "value =" << value << " char1 =" << char1 << " chart2 =" <<chart2 << endl; 

    value++; 

    cout << "value =" << value << " char1 =" << char1 << " chart2 =" <<chart2 << endl; 

} 

출력

value =10 char1 =10 chart2 =10 
value =11 char1 =11 chart2 =10 

볼 수 있듯이 const int & char1은 참조를 만들고 참조 된 값의 이후 변경 사항은 char1에서 볼 수 있습니다.

반면에 const int char2은 할당 된 값을 그대로 유지합니다.

+0

단일 스레드 응용 프로그램의 함수 매개 변수의 컨텍스트에서는 어떻습니까? – daj