みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

constのついたメンバ関数

 こんにちは。
C++を勉強しているのですが疑問に思ったことがあります。
const指定したメンバ関数にメンバ変数の変更をすることはエラーになるはずなんですが、
下記にある(*m_pRefCnt)++; はコンパイルが通るようです。
なぜこの一文だけ通るのでしょうか?
以下にソースを添付しておきます。

#include <iostream>

class hogeClass
{
private:
int* m_pRefCnt;
int val;

void AddRef() const {
(*m_pRefCnt)++; // これはOK?
val = 100; // これは駄目
}
void Release() { }
public:
explicit hogeClass(char* src = NULL) : val(0) { }

int& GetRefCnt() { return *(m_pRefCnt); }
virtual ~hogeClass() { Release(); }
};

int main()
{
int c = 435, k = 222;
using namespace std;
hogeClass a;

getchar();
return 0;
}

分かる人がいたらよろしくお願いします。

投稿日時 - 2012-03-31 12:06:45

QNo.7394099

すぐに回答ほしいです

質問者が選んだベストアンサー

> 下記にある(*m_pRefCnt)++; はコンパイルが通るようです。
> なぜこの一文だけ通るのでしょうか?

書き換えられているのは*m_RefCntであって、m_RefCnt 自体は変更されないから。

投稿日時 - 2012-03-31 13:07:04

補足

つまり、m_RefCntはポインタ変数だからアドレスの変更はできなくても
*m_RefCntは変更できるということでしょうか?

投稿日時 - 2012-03-31 14:09:02

お礼

回答ありがとうございます。
できたらでいいので補足に答えていただけると嬉しいです。

投稿日時 - 2012-03-31 17:28:43

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

> つまり、m_RefCntはポインタ変数だからアドレスの変更はできなくても
> *m_RefCntは変更できるということでしょうか?

です。

投稿日時 - 2012-03-31 21:07:40

お礼

回答ありがとうございました。
お陰ですっきりしました。 (*^^*)

投稿日時 - 2012-04-01 10:36:15

あなたにオススメの質問