Heim > Artikel > Backend-Entwicklung > Warum funktioniert NOMINMAX in anderen Dateien nicht, wenn std::min und std::max verwendet werden?
NOMINMAX- und std::min/max-Kollision
Um die Verwendung der Funktionen std::min und std::max der Standardbibliothek zu ermöglichen, Sie haben das NOMINMAX-Makro in Ihrer main.cpp-Datei definiert. Bei der Verwendung dieser Funktionen in anderen Dateien treten jedoch Probleme auf.
NOMINMAX ist so definiert, dass bestimmte Legacy-Definitionen in den Windows-Headerdateien deaktiviert werden, einschließlich Neudefinitionen von Min und Max als Makros. Dies liegt daran, dass diese Makros in früheren Versionen des Visual C-Compilers durch Windows-Header-Dateien definiert wurden und mit den Definitionen der Standardbibliothek in Konflikt geraten konnten.
Um das Problem zu beheben, müssen Sie sicherstellen, dass NOMINMAX in allen definiert ist die Dateien, in denen Sie std::min oder std::max verwenden möchten. Das einfache Hinzufügen der Makrodefinition zu Ihren anderen Dateien scheint jedoch nicht zu funktionieren.
Dies liegt daran, dass die Direktive #define einen globalen Geltungsbereich hat und sich auf den gesamten nachfolgenden Code in der Datei auswirkt. Allerdings werden Makros nicht auf Code angewendet, der bereits vorverarbeitet wurde. Daher hat die Definition von NOMINMAX in Ihren späteren Dateien möglicherweise keine Auswirkungen auf den Code, den Sie bereits geschrieben haben.
Um dieses Problem zu umgehen, können Sie die Funktionsnamen in Klammern setzen:
(std::min)(x, y);
Diese Syntax stellt sicher, dass kein funktionsähnliches Makro angewendet wird und der Compiler den Funktionsaufruf in std::min auflöst.
Das obige ist der detaillierte Inhalt vonWarum funktioniert NOMINMAX in anderen Dateien nicht, wenn std::min und std::max verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!