Я обычно использую 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?