5

ダブルポインタであるメンバー変数が欲しいです。オブジェクト、ダブルポインタが指すものは、クラスの外部から変更してはなりません。

次の試行では、 「'std ::string**'から'conststd ::string**'への無効な変換」が生成されます。

class C{

public:
    const std::string **getPrivate(){
        return myPrivate;
    }

private:
    std::string **myPrivate;
};
  • 単純なポインターだけを使用する場合、同じ構成が有効なのはなぜですかstd::string *myPrivate
  • 読み取り専用のダブルポインタを返すにはどうすればよいですか?

    明示的なキャストを行うのは良いスタイルreturn (const std::string**) myPrivateですか?

4

3 に答える 3

3

これを試して:

const std::string * const *getPrivate(){
    return myPrivate;
}

const std :: string **の問題は、呼び出し元がconstとして宣言されていないポインターの1つを変更できることです。これにより、ポインタと文字列クラス自体の両方がconstになります。

于 2011-06-08T19:37:35.863 に答える
2

あなたが本当にうるさくなりたいなら:

class C {

public:
    std::string const* const* const getPrivate(){
        return myPrivate;
    }

private:
    std::string **myPrivate;
};
于 2011-06-08T19:43:19.267 に答える
2

C ++では、生のポインター(ダブルポインターの場合はさらに少ない)が実際に必要であり、ケースがそれらの1つであるとは限らない場合が非常にまれです。適切な方法は、次のように値または参照を返すことです。

class C{

public:
    const std::string& getPrivate() const
    {
        return myPrivate;
    }

private:
    std::string myPrivate;
};
于 2011-06-08T19:49:24.983 に答える