编译器警告(等级 1)C5056

运算符“operator-name”:已弃用数组类型

注解

C++20 中已弃用数组类型的两个操作数之间的相等性和关系比较。 有关详细信息,请参阅 C++ 标准建议 P1120R0

在 Visual Studio 2019 版本 16.2 及更高版本中,尽管在启用 /std:c++latest 编译器选项时,两个数组之间的比较操作(不管级别和程度相似)现在会生成级别 1 C5056 警告。 在 Visual Studio 2019 版本 16.11 及更高版本中,它还会生成警告 /std:c++20

示例

在 Visual Studio 2019 版本 16.2 和更高版本中,以下代码在启用 /std:c++latest 编译器选项的情况下,生成 C5056 警告。 在 Visual Studio 2019 版本 16.11 及更高版本中,它还会生成警告 /std:c++20

// C5056.cpp
// Compile using: cl /EHsc /W4 /std:c++latest C5056.cpp
int main() {
    int a[] = { 1, 2, 3 };
    int b[] = { 1, 2, 3 };
    if (a == b) { return 1; } // warning C5056: operator '==': deprecated for array types
}

要避免出现此警告,可以比较第一个元素的地址:

// C5056_fixed.cpp
// Compile using: cl /EHsc /W4 /std:c++latest C5056_fixed.cpp
int main() {
    int a[] = { 1, 2, 3 };
    int b[] = { 1, 2, 3 };
    if (&a[0] == &b[0]) { return 1; }
}

要确定两个数组内容是否相等,可以使用 std::equal 函数:

std::equal(std::begin(a), std::end(a), std::begin(b), std::end(b));