我試圖確定編譯時C++ 0x功能是否可用。是否有一個通用的預處理器宏?我正在使用Visual Studio 2010的編譯器和Intel的編譯器。確定C++ 0x可用性
回答
宏__cplusplus
將have a value大於199711L
。
也就是說,並不是所有的編譯器都會填充這個值。最好使用羅傑的解決方案。
您有來自草案的引用來保證嗎? – 2009-12-29 18:24:04
即使使用'icc -std = C++ 0x',\ _ \ _ cplusplus仍然定義爲1. – 2009-12-29 18:26:25
只是Bjarne的網站。我認爲他所說的可能會達到標準,但我想這可能並非如此。 – GManNickG 2009-12-29 18:29:23
通常的做法是在編譯系統中確定它,並在編譯時傳遞「配置宏」,通常命名爲HAS_ *。例如:compiler -DHAS_LAMBDA source.cpp
。
如果你可以從編譯器版本宏中確定這個,那麼你可以在配置頭文件中定義這些宏來檢查它;但是,對於任何由命令行選項控制的內容,您都無法執行此操作。然而,您的構建系統確實知道您指定的選項,並且可以使用該信息。
查看boost.config爲一個真實的例子和大量關於特定編譯器,版本和功能的細節。
我們對nullptr和auto_ptr有類似的問題。下面是我們正在嘗試使用,直到somehing標準化:
#include <cstddef>
...
// GCC: compile with -std=c++0x
#if defined(__GNUC__) && ((__GNUC__ == 4 && __GNUC_MINOR__ >= 6) || (__GNUC__ >= 5))
# define HACK_GCC_ITS_CPP0X 1
#endif
#if defined(nullptr_t) || (__cplusplus > 199711L) || defined(HACK_GCC_ITS_CPP0X)
# include <memory>
using std::unique_ptr;
# define THE_AUTO_PTR unique_ptr
#else
# include <memory>
using std::auto_ptr;
# define THE_AUTO_PTR auto_ptr
#endif
它運作良好,在海灣合作委員會和微軟的Visual Studio。順便說一句,nullptr
是一個關鍵字,不能被測試 - 因此測試的原因是nullptr_t
。
- 1. 檢查C++ 0x算法添加的可用性
- 2. C++在任何編譯器中的0x庫可用性?
- 3. 這是正確的C++ 0x代碼嗎?
- 4. C++ 0x random_device'std :: runtime_error'
- 5. C++ 0x線程
- 6. C++ 0x中
- 7. template typedef C++ 0x
- 8. 使用的的C++ 0x
- 9. 在C++中使用__thread 0x
- 10. C++ 0x指定的初始化程序
- 11. C++ 0x與Qt Creator
- 12. Qt:CONFIG + = C++ 11,但-std = C++ 0x
- 13. 使用或不使用C++ 0x特性的
- 14. 如何在C++(C++ 0x)中使用'auto'?
- 15. 使用WhoIs來確定域可用性
- 16. 用JSP確定Flash的可用性
- 17. 該程序是否正確 - >使用C++ 0x N3242
- 18. C++ DLL浮點確定性
- 19. 如何確定URL的可用性? (Objective-C)
- 20. 如何使用autoconf與C++ 0x特性的
- 21. 確定Spring Bean的可用屬性?
- 22. 確定iCloud Key Value Store的可用性
- 23. 使用不推薦使用的綁定器和C++ 0x lambdas
- 24. C++確定類是可比
- 25. 我可以在C++ 0x模板中使用loki ObjectLevelLockable
- 26. 確定用C
- 27. 「雙師型」 與的C++ 0x
- 28. 瞭解C++ 0x功能
- 29. C++ 0x線程問題
- 30. 爲AVR編譯C++ 0x
我知道這是重複的,我只是找不到它。編輯:這是它:http://stackoverflow.com/questions/1686348/what-is-defined-if-a-compiler-is-cpp0x-compliant – GManNickG 2009-12-29 17:29:13
謝謝GMAN,但只有在完整的標準實施()顯然)。即使它有lambda表達式,英特爾也會返回199711 – Steve 2009-12-29 18:46:18
C++ 0x的功能目前是非標準的。沒有標準的方式來表明非標準功能的存在。如果您正在尋找個人功能,則必須在構建系統中推出自己的指標。 – 2009-12-29 18:52:13