我通常使用std::initializer_list<std::string>
,例如{"foo"s, "bar"s}
来填充容器。
显然,std::initializer_list<std::string>
包含临时字符串,我可以将它们移动到容器中:
#include <string>
#include <list>
using namespace std::literals;
void f(std::initializer_list<std::string> il)
{
std::list<std::string> coll;
for (auto&& tmp_str : il)
{
coll.emplace_back(std::move(tmp_str)); // Why ok here?
}
}
int main()
{
f({"foo"s, "bar"s});
}
但是,根据cppref:
std :: initializer_list类型的对象是轻量级代理提供访问类型为const T的对象数组的对象。
为什么C ++使std :: initializer_list const的元素类型为常数?
显然,
std::initializer_list<std::string>
包含临时字符串