/*- ========================================================== * 文件名 :TestCpp11_1.cpp * 開發人員:袁培榮 * 當前版本:1.0.0.2595 * 建立時間:2012-05-20 * 修改時間:2012-05-20 * 功能說明:測試編譯器是否支持C++11新特性(1) * 版權說明:版權全部 袁培榮 YuanPeirong * 編譯環境:Windows 7(x64) SP1 簡體中文專業版 * 編譯器: Visual Studio 2010 SP1(中文旗艦版) MinGW 20120426 GNU GCC 4.6.2 MinGW Distro 9.0 GNU GCC 4.7.0 Visual C++ 6.0 SP6(中文企業版) - ==========================================================*/ #include <iostream> #include <vector> using namespace std; //=====1.測試右值引用和move語意 bool is_r_value(int &&) { return true; } bool is_r_value(const int &) { return false; } void test(int && i) { is_r_value(i); is_r_value(std::move<int>(i)); } //==================================== int main(int argc, char* argv[]) { //=====2.測試以範圍爲基礎的 for 循環 int my_array[5] = {1, 2, 3, 4, 5}; for (int &x : my_array) { x *= 2; } //==================================== //=====3.測試型別推導 constexpr int GetFive() {return 5;} int some_value[GetFive() + 5]; const std::vector<int> v(1); auto a = v[0]; decltype(v[0])b; auto c = 0; auto d = c; decltype(c) e; decltype((c)) f = e; decltype(0) g; //==================================== return 0; } //=====4.測試初始化表達式 class C { int a=7; //在類的定義時初始化非靜態變量,只有C++11支持 public: C(); }; //==================================== //==================================== //=====測試結果 // 測試標準:編譯對測試代碼不報錯爲支持,不然不支持 //1.Visual Studio 2010 SP1(中文旗艦版) 所有不支持 //2.MinGW 20120426 GNU GCC 4.6.2 // 支持前兩個,不支持後兩個 // (注意,編譯時應該開啓新特性 -std=c++0x 或者 -std=gnu++0x) // 命令: g++ TestCpp11_1.cpp -o TestCpp11_1 -std=c++0x //3.MinGW Distro 9.0 GNU GCC 4.7.0 // 很高興,所有支持 // (注意,編譯時應該開啓新特性 -std=c++0x 或者 -std=gnu++0x) // 命令: g++ TestCpp11_1.cpp -o TestCpp11_1 -std=c++0x //4.Visual C++ 6.0 SP6(中文企業版) 所有不支持 //====================================