簡體   English   中英

如何檢測VS C++編譯器是否支持C++11?

[英]How to detect if VS C++ compiler supports C++11?

如何通過預處理器宏檢測 Visual Studio (VS) C++ 編譯器是否支持 C++11? 我嘗試使用__cplusplus (許多人建議用於此類檢查的預處理器宏),但它在 VS C++ 2010 編譯器中失敗(即從未聲明 function get_dimension ):

#if __cplusplus > 199711L
    int get_dimension(int index);
#endif

您可以使用開箱即用的_MSVC_LANG宏進行檢查。

__cplusplus是語言多編譯器象牙塔式的解決方案,但不幸的是必須在MSVC中啟用它才能有意義地使用(並且在非常舊的版本中可能不支持)。 這對於使用例如的人來說太棒了。 gcc默認設置為版本(大多數人會相信它也可以在MSVC上工作)。 所以只有當你需要支持許多編譯器時我才會擔心,即使那樣我也會考慮為一些編譯器添加特殊檢查,即MSVC

C++ 團隊博客

您需要使用#if __cplusplus >= 201103L來檢查編譯器是否 100% 符合 C++11。 如果為假,則編譯器不支持 C++11 或僅支持它的子集

現在,如果您只需要使用C++11 中的某些特定功能,那么您可以使用 Boost 來檢查它 例如,如果您需要constexpr支持,則使用

#ifndef BOOST_NO_CXX11_CONSTEXPR

您還可以使用一些宏,這些宏允許將 C++11 功能與 C++03 編譯器(如BOOST_CONSTEXPR

但更好的解決方案是使用_MSC_VER_MSC_FULL_VER完全排除古代編譯器

#if _MSC_VER > 1600

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM