iwa*_*ans 21 c++ aggregate-initialization stdarray
请参阅此示例:https : //godbolt.org/z/5PqYWP
为什么这个对数组不能以与对向量相同的方式初始化?
#include <vector>
#include <array>
int main()
{
std::vector<std::pair<int,int>> v{{1,2},{3,4},{5,6}}; // succeeds
std::array <std::pair<int,int>, 3> a{{1,2},{3,4},{5,6}}; // fails to compile
}
Run Code Online (Sandbox Code Playgroud)
Som*_*ude 24
您需要添加一对外部大括号来初始化std::array<...>对象本身:
std::array <std::pair<int,int>, 3> a{{{1,2},{3,4},{5,6}}};
Run Code Online (Sandbox Code Playgroud)
最外面的一对用于数组对象,第二对用于对象内部的聚合数组。然后是数组中的元素列表。
Vla*_*cow 14
类模板的特化std::array表示包含另一个聚合的聚合。
错误的原因是这个声明中的第一个花括号初始化器
std::array <std::pair<int,int>, 3> a{{1,2},{3,4},{5,6}};
^^^^^
Run Code Online (Sandbox Code Playgroud)
被视为内部聚合的初始化程序。在这种情况下,以下花括号初始化器被视为冗余初始化器。
所以你可以写
std::array <std::pair<int, int>, 3> a{ { {1,2},{3,4},{5,6} } };
^ ^
|the inner aggregate|
Run Code Online (Sandbox Code Playgroud)
或喜欢
std::array <std::pair<int, int>, 3> a{ std::make_pair( 1, 2 ), std::make_pair( 3, 4 ), std::make_pair( 5, 6 ) };
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1015 次 |
| 最近记录: |