Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa NOMINMAX tidak berfungsi dalam fail lain apabila menggunakan std::min dan std::max?

Mengapa NOMINMAX tidak berfungsi dalam fail lain apabila menggunakan std::min dan std::max?

Linda Hamilton
Linda Hamiltonasal
2024-11-10 16:02:02325semak imbas

Why is NOMINMAX not working in other files when using std::min and std::max?

NOMINMAX dan std::min/max Collision

Untuk mendayakan penggunaan fungsi std::min dan std::max perpustakaan standard, anda telah menentukan makro NOMINMAX dalam fail main.cpp anda. Walau bagaimanapun, anda menghadapi masalah menggunakan fungsi ini dalam fail lain.

NOMINMAX ditakrifkan untuk melumpuhkan takrifan lama tertentu dalam fail pengepala Windows, termasuk definisi semula min dan maks sebagai makro. Ini kerana dalam versi terdahulu pengkompil Visual C, makro ini ditakrifkan oleh fail pengepala Windows dan boleh bercanggah dengan takrifan perpustakaan standard.

Untuk menyelesaikan isu ini, anda perlu memastikan NOMINMAX ditakrifkan dalam semua fail yang anda ingin gunakan std::min atau std::max. Walau bagaimanapun, hanya menambah definisi makro pada fail anda yang lain nampaknya tidak berfungsi.

Ini kerana arahan #define mempunyai skop global dan mempengaruhi semua kod berikutnya dalam fail. Walau bagaimanapun, makro tidak digunakan pada kod yang telah dipraproses. Oleh itu, takrifan NOMINMAX dalam fail anda yang kemudian mungkin tidak mempunyai kesan pada kod yang telah anda tulis.

Untuk menyelesaikan isu ini, anda boleh menyertakan nama fungsi dengan kurungan:

(std::min)(x, y);

Sintaks ini akan memastikan bahawa makro seperti fungsi tidak digunakan dan pengkompil akan menyelesaikan panggilan fungsi ke std::min.

Atas ialah kandungan terperinci Mengapa NOMINMAX tidak berfungsi dalam fail lain apabila menggunakan std::min dan std::max?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn