一个列子演示vs2010 c++新特性
近日托安装雪豹的“福”,格了XP装了win7,前段时间看了C++0X标准以及VS2010诱人的新特性,不禁心痒痒在线安装了VS2010,然后手写了这个列子用来测试新增的特性。
struct _SUT { int _a; char _c; };
int _tmain(int argc, _TCHAR* argv[]) { //auto关键字 auto i = 0.0f; cout << typeid(i).name() << " i = " << i <<endl; //静态编译断言 static_assert(sizeof(i) == 4, "sizeof(i) != 4");
vector<int> v; for (int i = 0; i < 10; i++) v.push_back(i);
//decltype关键字 & 空指针常量 decltype(i) b = 1; decltype(b) *p = nullptr; p = &b;
//lambda表达式 for_each(v.begin(), v.end(), [&i, p](int n) { i += n; www.90168.org (*p)++; }); cout << "i=" << i << "\t" << "b=" << b << endl; //右值引用 _SUT lVal = { 1, 'c'}; _SUT &&rVal = move(lVal); cout << "rVal._a = " << rVal._a << endl;
return 0; }
PS:VS2010好用看得见,可惜只支持C++0X中的若干条新增特性,这就是现实(编译器厂商因为某种理由拒绝标准)与理想(语言标准)的差距啊。int _tmain(int argc, _TCHAR* argv[]) { //auto关键字 auto i = 0.0f; cout << typeid(i).name() << " i = " << i <<endl; //静态编译断言 static_assert(sizeof(i) == 4, "sizeof(i) != 4");
vector<int> v; for (int i = 0; i < 10; i++) v.push_back(i);
//decltype关键字 & 空指针常量 decltype(i) b = 1; decltype(b) *p = nullptr; p = &b;
//lambda表达式 for_each(v.begin(), v.end(), [&i, p](int n) { i += n; www.90168.org (*p)++; }); cout << "i=" << i << "\t" << "b=" << b << endl; //右值引用 _SUT lVal = { 1, 'c'}; _SUT &&rVal = move(lVal); cout << "rVal._a = " << rVal._a << endl;
return 0; }
Feedback
# re: 一个列子演示vs2010 c++新特性 回复更多评论
2010-06-10 16:43 by 空明流转不是厂商拒绝标准,而是标准还没完成,所以VS只需要引入一部分就OK了,和当年的VC6的情况是一样的。
# re: 一个列子演示vs2010 c++新特性 回复 更多评论
2010-06-10 16:44 by 空明流转
2010-06-13 16:07 by 乱78糟
@空明流转 怎么说呢,标准的制定者指定标准时既要考虑兼容性又要考虑编译器的实现复杂性,而厂商可能因为编译器的兼容或实现复杂度而拒绝支持某些标准,所以说是现实和理想的差距。
那个move的确没清晰的展示右值引用的特性,改成这样更为直观一些: _STU&& fun() { _SUT lVal = { 1, 'c'}; cout << "lVal._a = " www.90168.org<< lVal._a <<endl; return move(lVal); }
int main() { ... _SUT &&rVal = fun(); cout << "rVal._a = " << rVal._a << endl; }
那个move的确没清晰的展示右值引用的特性,改成这样更为直观一些: _STU&& fun() { _SUT lVal = { 1, 'c'}; cout << "lVal._a = " www.90168.org<< lVal._a <<endl; return move(lVal); }
int main() { ... _SUT &&rVal = fun(); cout << "rVal._a = " << rVal._a << endl; }