【发布时间】:2016-07-21 17:47:18
【问题描述】:
假设我有这样的课程:
class foo {
const A arr;
foo(B arg): arr(arg) { }
};
对于A 和B 类型,什么是最有效的选择。我在想这样的事情,
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不是一个容器,它不管理存储,它只引用一个外部分配的数组。它用于初始化 事物,而不是用于存储事物。线索就在名字里。