위치에 따른 const 의미를 정리해 보았습니다.
/**
* @brief
**/
class ConstPositionTest
{
public:
//> (const char*) msg : char* 가 const, 즉 msg 가 가리키는 데이터 변경 불가
char* Function1(const char* msg)
{
msg[0] = 't'; // error
return m_msg;
}
//> char* (const msg) : msg 변수가 const, 즉 msg 포인터 변수 변경 불가
char* Function2(char* const msg)
{
msg = m_msg; //error
return m_msg;
}
//> 메소드 상수화, 이 메소드는 클래스 멤버를 읽을 수는 있으나 변경 할 수는 없음
char* Function3(char* msg) const
{
m_msg = msg; //error
return m_msg;
}
//> (const char*) : 리턴 값이 const char* 이므로 리턴 받는 변수도 const char* 이어야 함
//> 따라서 리턴되는 포인터가 가리키는 데이터 변경 불가
const char* Function4(char* msg)
{
m_msg = msg;
return m_msg; //반환 받는 타입이 const가 아닐 경우 error
}
private:
char* m_msg;
};
/**
* @brief
* @param
* @see
* @remarks
* @code
* @endcode
* @return
**/
bool test_const_position()
{
ConstPositionTest test;
char msg[] = "hello, const!";
test.Function1(msg);
test.Function2(msg);
test.Function3(msg);
const char* pMessage = test.Function4(msg);
pMessage[0] = 0; // error
}
댓글 없음:
댓글 쓰기