2011-06-08 67 views
5

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

我以下try产生一个 “从无效到转换 '的std :: string **' '常量的std :: string **'”

class C{ 

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

private: 
    std::string **myPrivate; 
}; 
  • 为什么同样构造有效,如果我只使用一个简单的指针std::string *myPrivate
  • 我该怎么做才能返回一个只读双指针?

    做一个明确的演员return (const std::string**) myPrivate是不错的风格吗?

+0

你想constify:指针或指向的字符串? – 2011-06-08 19:08:07

+0

对不起,我编辑了我的帖子。它的字符串本身不能被修改。 – Hugo 2011-06-08 19:33:12

+1

把它们想象成“双重指针”可能是你问题的根源。术语“双指针”是我直到遇到SO之前从未遇到过的一个术语,并且我有兴趣知道哪个nitwit(不一定是SO)就是它的起源。 – 2011-06-08 19:45:22

回答

3

试试这个:

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

与常量的std :: string麻烦的**是,它允许呼叫者修改指针之一,这是不声明为const。这使得指针和字符串类本身都是const。

+0

+1即使我不同意你的'const'命令。 – 2011-06-08 19:41:05

2

如果你想成为真正挑剔:

class C { 

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

private: 
    std::string **myPrivate; 
}; 
2

也有极少数情况下在C++中,当真正需要原始指针(甚至更少的双指针),和你的情况不接缝就是其中之一。一个正确的方法是返回一个值或一个参考,如下所示:

class C{ 

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

private: 
    std::string myPrivate; 
}; 
+0

这也将是我的首选方式 - 尤其是对于一个字符串,但我不知道海报是否有其他类型可能实际上需要这个... – 2011-06-08 20:03:36

+0

也许我应该写我的动机:我想可以访问具有两个索引x [0] [1]的数组,所以我创建了一个指针数组。但是,尽管可能有可能在另一个位置更改我的代码,但我想知道如何处理“双指针”或降低亲指针指针。 – Hugo 2011-06-13 07:53:42