NOMINMAX 和std::min/max 碰撞
要啟用標準庫的std::min 和std::max 函數,您已在main.cpp 檔案中定義了NOMINMAX 巨集。但是,您在其他文件中使用這些函數時遇到問題。
NOMINMAX 的定義是為了停用 Windows 頭檔中的某些舊定義,包括將 min 和 max 重新定義為巨集。這是因為在早期版本的 Visual C 編譯器中,這些巨集是由 Windows 頭檔定義的,可能與標準函式庫的定義衝突。
要解決此問題,您需要確保在所有巨集中都定義了 NOMINMAX您打算使用 std::min 或 std::max 的檔案。但是,簡單地將巨集定義添加到其他文件中似乎不起作用。
這是因為 #define 指令具有全域作用域並影響檔案中的所有後續程式碼。但是,巨集不適用於已經經過預處理的程式碼。因此,後續文件中 NOMINMAX 的定義可能不會影響您已經編寫的程式碼。
要解決此問題,您可以用括號將函數名稱括起來:
(std::min)(x, y);
此語法將確保不應用類似函數的宏,並且編譯器會將函數呼叫解析為std::min。
以上是使用 std::min 和 std::max 時,為什麼 NOMINMAX 在其他檔案中不起作用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!