Bagikan melalui


Peringatan kompiler (level 1) C5056

operator 'operator-name': tidak digunakan lagi untuk jenis array

Keterangan

Perbandingan kesetaraan dan relasional antara dua operan jenis array tidak digunakan lagi dalam C++20. Untuk informasi selengkapnya, lihat P1120R0 proposal Standar C++.

Di Visual Studio 2019 versi 16.2 dan yang lebih baru, operasi perbandingan antara dua array (meskipun peringkat dan kesamaan tingkat) sekarang menghasilkan peringatan C5056 tingkat 1 saat /std:c++latest opsi pengkompilasi diaktifkan. Di Visual Studio 2019 versi 16.11 dan yang lebih baru, visual Studio 2019 juga menghasilkan peringatan di bawah /std:c++20.

Contoh

Di Visual Studio 2019 versi 16.2 dan yang lebih baru, kode berikut menghasilkan C5056 peringatan saat /std:c++latest opsi pengkompilasi diaktifkan. Di Visual Studio 2019 versi 16.11 dan yang lebih baru, visual Studio juga menghasilkan peringatan di bawah /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
}

Untuk menghindari peringatan, Anda dapat membandingkan alamat elemen pertama:

// 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; }
}

Untuk menentukan apakah konten dari dua array sama, gunakan fungsi std::equal:

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