【问题标题】:return const std::string*& from a std::string *tab[11]从 std::string *tab[11] 返回 const std::string*&
【发布时间】:2014-01-19 05:29:57
【问题描述】:

我的班级中有一个字符串数组:

class A
{
   string*          tab[11];
   const string*&   getTab();
}

我正在填充它

常量字符串 &str

我的第一个想法是做:

return tab;

但是 G++ 告诉我:

从“std::string**”类型的右值初始化“const string*&”类型的非常量引用无效

我做错了什么?

我应该返回什么?

提前致谢:)

【问题讨论】:

  • 您的返回类型是对指针的引用。您正在返回一个指针数组,然后将其衰减为指向指针的指针。您实际上想要返回什么?
  • 指针数组的常量引用
  • 你有一个指向字符串的指针数组,而不是你所说的字符串数组。

标签: c++ string pointers reference constants


【解决方案1】:

string*& 是对指向字符串的指针的引用。
但是您希望返回对字符串指针的array 的引用。 所以你应该返回的类型是string**&(当然也可以是const)。

另一种解决方案是使用 std::array<class T, std::size_t N> 类型而不是原始数组,这样您的语法会更清晰:

class A
{
    std::array<string*, 11> tab;
    const std::array<string*, 11>& getTab();
}

std::array 是一个非常轻量级的原始 c 数组包装器,因此使用它几乎不涉及性能开销。

【讨论】:

  • 幸运的 op 没有输入‘string*& const`,这将是对第一个字符串的 const 引用
【解决方案2】:

声明一个合适的 typedef 是最简单的:

class A
{
   typedef string Table[11];
   Table     tab;
   Table&    getTab();
};

【讨论】: