相关疑难解决方法(0)

为什么在C++ 14中对数组的初始化仍然需要双括号?

使用C++ 14标准,std::array可以使用单个括号进行初始化(请参阅http://en.cppreference.com/w/cpp/container/array):

然而,这并没有为工作std::arraystd::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)

c++ initializer-list c++14

62
推荐指数
3
解决办法
3929
查看次数

错误:“std::array&lt;std::counting_semaphore&lt;1&gt;, 4&gt;”的初始值设定项太多

下面的代码片段无法编译。我尝试了不同的初始化程序,但无法编译。

\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}\n
Run 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}\n
Run Code Online (Sandbox Code Playgroud)\n

难道不能声明一个binary_semaphores 数组吗?正确的语法是什么?

\n

c++ initializer-list stdarray binary-semaphore c++20

2
推荐指数
1
解决办法
115
查看次数