C++의 메소드에 대한 현재의 이해와 충돌하는 상황이 발생했습니다.C++의 메서드 반환 형식 및 수정 자 순서가 중요합니까?
저는 Ivor Horton의 "Beginning Visual C++ 2010"(Wrox Press)을 통해 작업하고 있습니다. 내가 같이 수정 재 배열했다
double Volume() const {
return m_Length * m_Width * m_Height;
}
: 같은 페이지 449에서 예 8_03, 메소드가 정의 내 C# 및 Java 배경에서
double **const** Volume() {
return m_Length * m_Width * m_Height;
}
을, 나는 할 CONST의 위치를 예상했다 내가 Ivor 그것을 가지고 방식으로 순서를 반환 할 때
error C2662: 'CBox::Volume' : cannot convert 'this' pointer from
'const CBox' to 'CBox &'
오류가 사라 : 무관하지만 컴파일에 나는 오류가 발생했습니다.
실제로 순서가 달라지며 일부 이국적인 버그가 아닌가요? 순서가 중요하다면 올바른 위치를 어떻게 기억합니까?
감사합니다,
스콧 const
이 멤버 메소드의 이름 뒤에 위치
아, 그래! 이것은 정확히 그 것이 었습니다 - 컴파일러는 이것과 const에 관해 화가났습니다. 그래서 const가 메소드의 끝 부분에 추가된다는 것은 표준 규칙 일뿐입니다 ... 결국 const는 이것이 const라는 것을 의미합니까? Java/C#의 느슨한 세상은 너무 용서합니다. –
@Scott : Java는 용서할 수 없지만 형식 한정자가 없습니다. 'const'를 사용할 때 복잡한 타입의 어느 부분이'int const * '를 수정하는지 문제가됩니다. const가 다른 것들에 적용되기 때문에'int * const'와 같지 않습니다. 마찬가지로 멤버 함수 선언에서'const'의 위치는 의미가 있습니다. 그리고 "멤버 함수"에 주목하십시오. 여러분이 계속 메소드를 호출한다면, C++을 자바와 다른 모자에서 무의식적으로 생각하게 할 것이며, 그렇지 않습니다 :-) –