測試編譯器是否支持C++11新特性(1)

/*- ==========================================================
*     文件名  :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(中文企業版) 所有不支持
//====================================
相關文章
相關標籤/搜索