【问题标题】:Best way to store and construct member const array or strings存储和构造成员 const 数组或字符串的最佳方式
【发布时间】:2016-07-21 17:47:18
【问题描述】:

假设我有这样的课程:

class foo {
  const A arr;
  foo(B arg): arr(arg) { }
};

对于AB 类型,什么是最有效的选择。我在想这样的事情,

class foo {
  const std::initializer_list<std::string> arr;
  foo(std::initializer_list<std::string> arg): arr(arg) { }
};

但我认为这将在arr 中复制构造字符串。我希望能够做到这一点:

std::string str1("there"), str2("now");
foo bar({"hello",str1,std::move(str2)});

并将括号中的右值字符串移至arr

我应该使用std::initializer_list,还是std::vector,还是别的什么?

【问题讨论】:

  • 不要使用initializer_list 作为成员。 initializer_list 不是一个容器,它不管理存储,它只引用一个外部分配的数组。它用于初始化 事物,而不是用于存储事物。线索就在名字里。

标签: arrays c++11 member


【解决方案1】:

arr 定义为std::vector&lt;std::string&gt;,并将ctor 的参数定义为std::initializer_list&lt;std::string&gt;,大部分都是您猜到的。

【讨论】:

  • 我的用法示例中的 str2 会随此实现一起移动吗?
猜你喜欢
  • 2013-03-02
  • 1970-01-01
  • 1970-01-01
  • 2010-12-15
  • 2023-03-17
  • 2016-01-03
  • 1970-01-01
  • 2012-03-31
  • 2015-10-18
相关资源
最近更新 更多