5

我想要一个成员变量,它是一个双指针。双指针指向的对象不得从类外部修改。

我的以下尝试产生 “从 'std::string**' 到 'const std::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 的指针之一。这使得指针和字符串类本身都是常量。

于 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++ 中的情况非常罕见,并且您的情况似乎不是其中之一。正确的方法是返回一个值或引用,如下所示:

class C{

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

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