Maison > développement back-end > C++ > le corps du texte

Pourquoi NOMINMAX ne fonctionne-t-il pas dans d'autres fichiers lors de l'utilisation de std :: min et std :: max ?

Linda Hamilton
Libérer: 2024-11-10 16:02:02
original
322 Les gens l'ont consulté

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

NOMINMAX et std::min/max Collision

Pour activer l'utilisation des fonctions std::min et std::max de la bibliothèque standard, vous avez défini la macro NOMINMAX dans votre fichier main.cpp. Cependant, vous rencontrez des problèmes lors de l'utilisation de ces fonctions dans d'autres fichiers.

NOMINMAX est défini pour désactiver certaines définitions héritées dans les fichiers d'en-tête Windows, y compris les redéfinitions de min et max en tant que macros. En effet, dans les versions antérieures du compilateur Visual C, ces macros étaient définies par les fichiers d'en-tête Windows et pouvaient entrer en conflit avec les définitions de la bibliothèque standard.

Pour résoudre le problème, vous devez vous assurer que NOMINMAX est défini dans tous les fichiers dans lesquels vous avez l'intention d'utiliser std::min ou std::max. Cependant, le simple fait d'ajouter la définition de la macro à vos autres fichiers ne semble pas fonctionner.

En effet, la directive #define a une portée globale et affecte tout le code ultérieur du fichier. Cependant, les macros ne sont pas appliquées au code déjà prétraité. Par conséquent, la définition de NOMINMAX dans vos fichiers ultérieurs peut n'avoir aucun effet sur le code que vous avez déjà écrit.

Pour contourner ce problème, vous pouvez mettre les noms de fonctions entre parenthèses :

(std::min)(x, y);
Copier après la connexion

Cette syntaxe garantira qu'une macro de type fonction n'est pas appliquée et le compilateur résoudra l'appel de fonction en std::min.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal