読者です 読者をやめる 読者になる 読者になる

gl5_progのメモ

自分のためのメモとかまとめとか

constの抜け道

http://ideone.com/bXfoUv

#include <stdio.h>

class A
{
    A* p;
    int m_Value;
public:
    A():p(this),m_Value(0){}
    int GetValue( void ) const { return m_Value; }
    
    // const member function
    void SetValue( int value ) const { p->m_Value = value; }
};

int main( void )
{
    const A a;
    printf( "%d\n", a.GetValue() );
    a.SetValue( 5 );
    printf( "%d\n", a.GetValue() );
    return 0;
}

すごく基本的なことかもしれないけどconstは参照先に関しては影響しない。上記のようにすると、いともたやすくメンバの変更ができてしまう。上記の例だとわかりやすいが、もっと入り組んだクラス関係だと、constメンバ関数だから変更は行われないと思っていても、変更が行われてしまう可能性がある。