C ++为什么使std :: initializer_list const的元素类型为常数?

问题描述 投票:0回答:1

我通常使用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的元素类型为常数?

c++ c++14 standards rvalue-reference design
1个回答
1
投票

显然,std::initializer_list<std::string>包含临时字符串

© www.soinside.com 2019 - 2024. All rights reserved.