这段代码:
#include <iostream>
#include <string>
std::pair<std::initializer_list<std::string>, int> groups{ { "A", "B" }, 0 };
int main()
{
for (const auto& i : groups.first)
{
std::cout << i << '\n';
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译但返回段错误。为什么?
在 gcc 8.3.0 和在线编译器上测试。
bol*_*lov 24
std::initializer_list
不是为了存储,它只是为了......初始化。在内部,它只存储一个指向第一个元素和大小的指针。在您的代码中,std::string
对象是临时对象,initializer_list
既不拥有它们的所有权,也不延长它们的寿命,也不复制它们(因为它不是容器),因此它们在创建后立即超出范围,但您initializer_list
仍然持有指向它们的指针。这就是您遇到分段错误的原因。
对于存储,您应该使用容器,例如std::vector
或std::array
。
归档时间: |
|
查看次数: |
795 次 |
最近记录: |