![](/img/trans.png)
[英]Why do I need Boost.SmartPtr for the C++ compiler that supports C++11 and later?
[英]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
。
您需要使用#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.