C++의 const 할당은 참조에 의해 암시 적으로 수행됩니까? 이 경우, 예를 들어, 중복 앨리어싱이 명시 적으로 만드는 것입니다 :C++ : 왼쪽 const 할당에 참조/별칭 (&)을 중복 추가합니까?
이const std::vector<unsigned>& chart = chartData.at(id);
즉, 단순히이 동일합니다 :
const std::vector<unsigned> chart = chartData.at(id);
C++의 const 할당은 참조에 의해 암시 적으로 수행됩니까? 이 경우, 예를 들어, 중복 앨리어싱이 명시 적으로 만드는 것입니다 :C++ : 왼쪽 const 할당에 참조/별칭 (&)을 중복 추가합니까?
이const std::vector<unsigned>& chart = chartData.at(id);
즉, 단순히이 동일합니다 :
const std::vector<unsigned> chart = chartData.at(id);
코드 두 개가 동일하지 않습니다. 고려 :
int value{1};
int const& a{value};
int const b{value};
++value;
std::cout << a << ' ' << b << '\n';
는 확실히 우리는 이것이 "최적화"를 수용 할 수없는 점에 동의 할 수 있습니까?
참고로 참조를 통한 액세스는 값에 대한 액세스보다 비효율적 일 수 있습니다. 그 이유는 참조가 일부 기준에서 추가 참조 연산을 발생시킬 것이기 때문입니다.
우리는 당신이 예제 무슨 말을하는지 이해하려고 노력하자
#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은 할당 된 값을 그대로 유지합니다.
단일 스레드 응용 프로그램의 함수 매개 변수의 컨텍스트에서는 어떻습니까? – daj
아니요, 하나는 참조를 만들고 다른 하나는 참조를 만들지 않습니다. –
컴파일러가 const이므로 할당을 참조로 최적화하지 않는 이유는 무엇입니까? chartData.at (id) – daj
을 돌연변이시킬 차트에는 할 수있는 것이 없어야합니다. 코드에 "할당"이 없습니다. –