아래 첨자 연산자를 오버로드할 때 const int 매개변수를 사용하는 이유는 무엇입니까?
-
21-12-2019 - |
문제
저는 C++을 처음 접하는데 왜/언제 이것을 사용해야 하는지 설명해 주실 수 있나요?
int & MyArray::operator[] (const int i)
{
return arr[i];
}
이것 대신에
int & MyArray::operator[] (int i)
{
return arr[i];
}
해결책
그것은 엄청난 양의 차이를 만들지 않습니다!
어떤 사람들은 파라미터를 불변으로 치료하기를 좋아하므로 const
로 깃발을줍니다.이 경우 그것은 스타일리즘입니다.
다른 팁
함수에서 선언, 최상위 수준이기 때문에 아무런 차이가 없습니다. const
s는 무시됩니다.
이 두 개는 실제로 동일한 선언이므로 최상위 수준 const
함수 매개변수에서는 피해야 합니다:
void foo(int);
void foo(const int); // re-declaration of above function
함수에서 정의, 이는 함수에서 인수의 복사본을 변경할 수 없음을 의미합니다.
void foo(int i) { i++; } // OK
void foo(const int i) { i++; } // Error
따라서 로컬 변수가 다음과 같다는 것을 표현하기 위해 구현 아티팩트로 사용할 수 있습니다. const
.이는 컴파일러에게 최적화를 수행할 수 있는 더 많은 범위를 제공합니다.
이러지 마세요.발신자의 관점과 동일하며 시각적 소음만 추가합니다.
매개변수 i
값으로 전달되고 일반 데이터 유형이므로 복사되므로 다음과 같이 표시하면 const
메소드 내에서 변경할 수 없다고 컴파일러에 알리고 있지만 복사본이므로 전혀 중요하지 않으며 이 특정 예에서는 이를 인덱스로 사용하고 있습니다.
양식 양식이 정확합니다.함수에서 "i"매개 변수가 수정되지 않도록하는 경우 첫 번째를 사용하십시오. 함수가 길거나 더 복잡한 경우 유용 할 수 있습니다. 그러나 운영자의 선언에는 const :
를 사용하지 마십시오.int& operator[](int i);
.
const가없는 선언과 정의가없는 법적입니다.
Generale 규칙으로, 수정하려는 모든 것이 const
If you not trying to edit your parameter then its better to use const
.
As far as performance is concerned not much difference. But it safeguards your parameter from editing (accidentally) inside function.
int & MyArray::operator[] (const int i)