使用C++ 14标准,std::array可以使用单个括号进行初始化(请参阅http://en.cppreference.com/w/cpp/container/array):
然而,这并没有为工作std::array的std::pair.
为什么这些工作:
std::pair<int, int> p { 1, 2 };
std::array<int, 3> a {1, 2, 3};
Run Code Online (Sandbox Code Playgroud)
但是这不工作:
std::array<std::pair<int, int>, 3> b {{1, 11}, {2, 22}, {3, 33}};
Run Code Online (Sandbox Code Playgroud)
虽然这确实有效吗?
std::array<std::pair<int, int>, 3> b {{{1, 11}, {2, 22}, {3, 33}}};
Run Code Online (Sandbox Code Playgroud)
此外,为了完成,一个好的旧数组的初始化确实适用于单个大括号
std::pair<int, int> c[3] {{1, 11}, {2, 22}, {3, 33}};
Run Code Online (Sandbox Code Playgroud) 下面的代码片段无法编译。我尝试了不同的初始化程序,但无法编译。
\n#include <array>\n#include <semaphore>\n\n\nint main()\n{\n std::array<std::binary_semaphore, 4> semaphores { {0}, {0}, {0}, {0} };\n auto& [ lock1, lock2, lock3, lock4 ] { semaphores };\n}\nRun Code Online (Sandbox Code Playgroud)\n这是错误消息:
\n#include <array>\n#include <semaphore>\n\n\nint main()\n{\n std::array<std::binary_semaphore, 4> semaphores { {0}, {0}, {0}, {0} };\n auto& [ lock1, lock2, lock3, lock4 ] { semaphores };\n}\nRun Code Online (Sandbox Code Playgroud)\n难道不能声明一个binary_semaphores 数组吗?正确的语法是什么?