class 키워드들

김대익·2022년 3월 4일

const 키워드는 c++개발을 매우 안전하게 해주는 키워드로,
기본적으로 붙일 수 있는 모든 곳에 붙인다.
컴파일러가 const를 체크해서 잘못된 점이 있으면 compile error로 리포팅해주기 때문이다.


위처럼 멤버함수에 const를 선언했는데 mName = "no const";처럼 멤버 변수의 값을 변경하면
컴파일러가 에러로 문제점을 보여준다.

멤버변수에 mutable을 붙이게되면 const 선언이 되어있어도 멤버변수 변경이 가능하다.
하지만 사용하지않는 것이 좋다


explicit 키워드는 주로 constructor에서 쓰이며
c++에서 explicit 키워드가 필요한 가장 큰 이유는 implicit conversion때문이다.

여기서 const Cat kitty = 3;이라고 하여도
implicit하게 Cat(int age)의 인수로 들어가서 에러없이 빌드가 된다.
explicit 키워드를 이용하면 정확하게 Cat kitty{3}로 인수를 주지 않으면 에러를 내게 되어 더 안전하게 프로그래밍 할 수 있다.


encapulation return 타입

이때 std::string name() const는 return by value이므로 const를 붙여준다.

std::string name = kitty.name()을 실행하면 복사가 일어난다
const std::string & nameRef = kitty.name()을 실행하면
reference만 copy되기 때문에 실제적으로 deep copy가 일어나지않는다.

그림으로 그려보면 std::string name()은
return by value로 새로운 string이 만들어지고
kitty 문자열이 복사되면서 s는 kitty를 가리킬 것이다.


const reference로 return해주고 받는타입이 const reference라면
기존의 kitty를 가리키므로 더 효율적인 c++코드이다.
앞에 std::string&앞에 const를 붙인 이유는 받은 reference가 가리키는 문자열을 수정하지 못하게 막아준다.

즉 encapsulation interface를 만들 때 그 값이 작다면 return by value를 해도 되지만
크다면 return by const reference가 더 효율적이다.

0개의 댓글