c++ - 后置++重载返回类型为何是const类型的?
迷茫
迷茫 2017-04-17 15:22:22
0
3
620
// 后置++,返回自增前的值,且返回的是一个右值
const int operator++(int){
    int temp(*this);
    *this += 1;
    return temp;
}

我是在看一本书上看到的,返回类型是const的,随后百度看了下,发现大家博客写的大多也是返回const,我有点想不通,为何?去掉const又何妨呢?

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

모든 응답(3)
Ty80

클래스 작성자는 반환된 결과가 값으로만 ​​사용되며 결과가 객체로 수정될 수 없음을 강조하기 위해 이 글을 작성합니다. const을 제거하면 더 이상 이 제한이 적용되지 않습니다. 예를 들어 컴파일러에 의해 차단되지 않고 cout << (a ).modify()을 작성할 수 있습니다.

PHPzhong

C 11 다음:

내장된 후증가 표현식은 prvalue입니다. 표준은 클래스가 아닌 비배열 prvalue가 const/휘발성으로 수정되지 않을 것이라고 규정합니다. int 연산자 (int);는 호출 시 prvalue입니다. 이 반환 값 유형에 const를 추가하는 것은 중복됩니다(책에 무작위로 기록될 수 있음). 일반적으로 연산자 오버로딩은 내장 연산자 버전과 유사한 의미를 유지해야 하므로 이를 prvalue에 추가하면 됩니다.

prvalue가 const가 아닌 멤버 함수를 호출하는 것을 방지하려면 ref-qualifier(예: 자동 수정() &;

)를 사용하세요.

const로 수정된 prvalue는 이동 의미론을 방지하는 등 const가 아닌 rvalue 참조와 일치하지 않습니다. 이는 대부분의 경우 추가 런타임 오버헤드만 가져옵니다. const 값을 반환하는 것은 더 이상 사용되지 않습니다.

洪涛

C 를 오랫동안 작성하지 않아서 잊어버렸지만 예를 하나 들어보겠습니다. 1 ; int a = 2; a ;

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿