'const auto'에는 어떤 의미가 있습니까?
질문은 충분히 분명하다고 생각합니다. 의지 auto
키워드 const를-다움을 자동 감지, 또는 항상 예를 들어가있는 경우에도 const가 아닌 유형을 반환합니다. 두 가지 버전의 함수 (하나는 반환 const
하고 다른 하나는 반환 하지 않음).
기록을 const auto end = some_container.end()
위해 for-loops 전에 사용 하지만 이것이 필요한지 아니면 정상과 다른지 모르겠습니다 auto
.
어쩌면 당신은 혼동 const_iterator
하고 const iterator
. 첫 번째 요소는 const 요소를 반복하고 두 번째 요소는 operators
++ 및-를 사용할 수 없기 때문에 전혀 반복 할 수 없습니다 .
.NET Framework에서 반복하는 경우는 거의 없습니다 container.end()
. 일반적으로 다음을 사용합니다.
const auto end = container.end();
for (auto i = container.begin(); i != end; ++i) { ... }
const auto x = expr;
~와 다르다
auto x = expr;
같이
const X x = expr;
~와 다르다
X x = expr;
따라서 .NET 이없는 경우처럼 const auto
및 const auto&
많이 사용하십시오 auto
.
오버로드 해결은 반환 유형의 영향을받지 않습니다. const
또는 const
lvalue의 no x
가에서 호출되는 함수에 영향을주지 않습니다 expr
.
두 가지 템플릿이 있다고 가정합니다.
template<class U> void f1( U& u ); // 1
template<class U> void f2( const U& u ); // 2
auto
타입을 추론하며, 가변 파라미터와 동일한 종류 것이다 u
합니다 (같이 // 1
, 케이스) const auto
파라미터가 가변으로 동일한 유형의 것 u
에 갖는 // 2
경우. 그러니 const auto
강제 const
한정자입니다.
컴파일러는 자동 한정자의 유형을 추론합니다. 추론 된 유형이 some_type
이면 const auto
로 변환됩니다 const some_type
. 그러나 좋은 컴파일러는 auto
변수 의 전체 범위를 검사 하고 값이 어디에서나 변경되는지 확인합니다. 그렇지 않은 경우 컴파일러 자체는 다음과 같은 유형을 추론합니다 auto
.-> const some_type
. 나는 Visual Studio Express 2012에서 이것을 시도했으며 생성 된 기계 코드는 두 경우 모두 동일합니다. 각 컴파일러가 그렇게 할 것인지 확실하지 않습니다. 그러나 const auto
다음 세 가지 이유로 사용하는 것이 좋습니다 .
- 코딩 오류 방지. 이 변수를 변경하지 않으려 고했지만 범위 어딘가에서 변경되었습니다.
- 코드 가독성이 향상되었습니다.
- 몇 가지 이유가 추론하지 않는 경우 컴파일러 도움
const
을 위해auto
.
참고 URL : https://stackoverflow.com/questions/5070521/does-const-auto-have-any-meaning
'IT박스' 카테고리의 다른 글
numpy 배열의 n 번째 항목마다 서브 샘플링 (0) | 2020.10.27 |
---|---|
HTTP 양식에서 HTTPS로 제출하는 것이 안전합니까? (0) | 2020.10.27 |
함수에서 키워드 사용-PHP (0) | 2020.10.27 |
git diff를 사용하여 줄 번호를 추가하고 수정하려면 어떻게해야합니까? (0) | 2020.10.27 |
MySQL Workbench Edit Table Data는 읽기 전용입니다. (0) | 2020.10.27 |