为什么下面的C++代码无法编译?
#include <utility>
int main() {
int x[6];
int y[6];
std::pair<int[6], int[6]> a(x, y);
return 0;
}
例如 MSVC 给出以下错误:
错误 C2661:'std::pair
::pair':没有重载函数需要 2 个参数
感谢使用C++替代品构造数组的评论,但我也想知道代码无法编译的原因。
使用
int[]
作为 std::pair
中的元素类型实际上是允许的。std::pair<int[6], int[6]> a;
a.first[0] = 1;
无效的是使用
(x,y)
对的初始化。 C 数组不可复制分配:您无法通过简单的赋值 a2
将某个数组 a1
分配给另一个 a1 = a2;
。当传递给函数/方法时,C 数组会衰减为指针。
std::array
:
#include <utility>
#include <array>
using IntArr6 = std::array<int, 6>;
IntArr6 x{ 1,2,3,4,5,6 };
IntArr6 y{ 11,22,33,44,55,66 };
std::pair<IntArr6, IntArr6> aa{ x,y };
注意
using
的用法(提供类型别名)以使代码更具可读性。