为什么 C++ 中不允许使用 std::pair<int[N], int[N]>?

问题描述 投票:0回答:1

为什么下面的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++替代品构造数组的评论,但我也想知道代码无法编译的原因。

c++ arrays std-pair
1个回答
12
投票

使用

int[]
作为
std::pair
中的元素类型实际上是允许的。
例如,您可以使用:

std::pair<int[6], int[6]> a;
a.first[0] = 1;

无效的是使用

(x,y)
对的初始化。 C 数组不可复制分配:您无法通过简单的赋值
a2
将某个数组
a1
分配给另一个
a1 = a2;
。当传递给函数/方法时,C 数组会衰减为指针。

但是,在 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
的用法(提供类型别名)以使代码更具可读性。

© www.soinside.com 2019 - 2024. All rights reserved.