'const'에 해당되는 글 1건

  1. 2009.09.10 [C/C++] const

[C/C++] const

CS/C/C++ 2009. 9. 10. 09:15
원문 : Effective C++

char greeting[] = "Hello";

char *p = greeting;

const char * p = greeting;        // 상수 데이터 (char const * p = greeting;)
char * const p = greeting;        // 상수 포인터      
const char * const p = greeting;  // 상수 데이터, 상수 포인터



class Sample
{
public:
    Sample(char e) : _elem(e) {}
    const char* Get() const { return &_elem; }
    // 앞의 const는 return type이 const라는 것이고, 뒤의 const는 상수 멤버임을 의미한다.
    // 상수 멤버란, 어떤 멤버 함수가 그 객체의 어떤 데이터 멤버도 건드리지 않아야 함(static 멤버 제외).

private:
    char _elem;
};

만약,
char* Get() const { return &_elem; }
같이 한다면, 상수 객체에 대한 포인터를 리턴받아 값을 수정하는 것이 가능해 지므로 compile error.



const 키워드가 있고 없고의 차이만 있는 멤버 함수는 오버로딩이 가능하다.
class TextBlock
{
public:
    ...
   
// 상수 객체에 대한 operator[]
    const char& operator[](std::size_t position) const { return text[position]; }
    // 비 상수 객체에 대한 operation[]
    char& operator[](std::size_t position) { return text[poistion]; }
private:
    std::string text;
};


TextBlock tb("Hello");       
tb[0] = 'x';    // 비 상수 멤버를 호출


const TextBlock ctb("World");
cout << ctb[0]; // 상수 멤버를 호출

: