아래 첨자 연산자를 오버로드할 때 const int 매개변수를 사용하는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com//questions/21042437

  •  21-12-2019
  •  | 
  •  

문제

저는 C++을 처음 접하는데 왜/언제 이것을 사용해야 하는지 설명해 주실 수 있나요?

int & MyArray::operator[] (const int i)
{
    return arr[i];
}

이것 대신에

int & MyArray::operator[] (int i)
{
    return arr[i];
}
도움이 되었습니까?

해결책

그것은 엄청난 양의 차이를 만들지 않습니다!

어떤 사람들은 파라미터를 불변으로 치료하기를 좋아하므로 const로 깃발을줍니다.이 경우 그것은 스타일리즘입니다.

다른 팁

함수에서 선언, 최상위 수준이기 때문에 아무런 차이가 없습니다. consts는 무시됩니다.

이 두 개는 실제로 동일한 선언이므로 최상위 수준 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)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top