공부/C || C++

const 멤버 함수의 리턴 타입을 레퍼런스로 할 수 없는 이유/ const 멤버함수 내부에서 const가 아닌 멤버 함수를 호출할 수 없다

sudo 2021. 11. 12. 04:38

위의 GetBar 함수같은 표현은 허용되지 않는다. 그 이유는 stackoverflow에서 쉽게 찾을 수 있다.

요약하자면 레퍼런스를 리턴하면 클래스의 내부 상태(여기선 Bar 멤버 변수)를 바꾸지 않는 다는 것(const)을 보장할 수 없기 때문이다. 따라서 const를 빼던가 레퍼런스(&)를 리턴 타입에서 빼줘야 한다

 

여담이지만 const 멤버 함수 내부에서는 const 멤버 함수가 아닌 다른 함수를 호출할 수 없다. 

 

 

Reference

https://stackoverflow.com/questions/4957025/const-methods-that-return-references/4957167

 

Const Methods that Return References

class Foo { int Bar; public: int& GetBar() const { return Bar; } } Is it okay that GetBar is a const method? It's not actually changing anything, but it's provid...

stackoverflow.com

 

'공부 > C || C++' 카테고리의 다른 글

C++ std::move  (0) 2022.09.05
C++ 11 RVO(Return Value Optimization)  (0) 2022.08.29
C++ const가 붙는 위치에 따른 의미변화  (0) 2021.09.01
C++ 변환 연산자(Conversion Operator)  (0) 2021.08.28
C++ vector의 resize vs reserve  (0) 2021.08.25