0

私は C++ を学んでいますが、これに出くわしましたが、この小さなことを理解していません。GetName() 関数が文字型のポインターであり、定数である理由は何ですか?

class Derived: public Base
{
public:
    Derived(int nValue)
        : Base(nValue)
    {
    }

    const char* GetName() { return "Derived"; }
    int GetValueDoubled() { return m_nValue * 2; }
};
4

3 に答える 3

8

"Derived"文字列リテラルです(調べてください)。文字列リテラルを変更しようとすると、未定義の動作がconst発生するため、誤って変更しないように戻り値の型がマークされます。

于 2012-08-08T01:08:16.543 に答える
1

あなたが見ているのはC-Stringです。の配列の最初の要素へのポインターでありcharsconst文字リテラルを編集してはならないためです。

于 2012-08-08T01:09:00.413 に答える
0

C++ では、関数から一連の値を返すことができないことに注意してください。彼らが言ったように、これは一連の文字のグループが保存されている場所へのポインターを返します。ポインタは、メモリ内のアドレスへの参照です。クラスで getValue メソッドを記述する場合、ほとんどの場合、値が何であるかを外部にいる人だけに知らせたいだけですが、同じように読み取り専用です。クラスとしてのあなたがその値の唯一の所有者であり、値が変更された場合setValue メソッドからではなく、ランダムな場所から、問題が発生する可能性があります。

于 2012-08-08T01:15:27.027 に答える