您的位置:首页 > 编程语言 > C语言/C++

C++ 11

2014-04-30 18:01 375 查看
nullptr始终使用nullptr表示一个null指针值,绝不要使用数字0或者NULL宏,因为它们也可以代表一个整数或者指针从而产生歧义。
Range for基于范围的循环使得按顺序访问其中的每个元素变得非常方便。
非成员(nonmember) begin和end始终使用非成员begin和end,因为它是可扩展的并且可以应用在所有的容器类型(container type),不仅仅是遵循了STL风格提供了.begin()和.end()成员函数的容器,甚至数组都可以使用。如果你使用了一个非STL风格的collection类型,虽然提供了迭代但没有提供STL的.begin()和.end(),通常可以为这个类型编写自己的非成员begin和end来进行重载。这样你就可以使用STL容器的编程风格来遍历该类型。C++11标准提供了示例数组就是这样一个类型,标准同时为数组提供了begin和end。
2. 自动类型推导和声明类型(decltype)在C++03中,在声明对象时,你必须指定对象的类型,然而,在许多情况下,对象声明时都有初始化,C++11利用了这个优势,允许你声明对象时不指定类型:
auto x=0; //
x has type int because 0 is intauto c='a'; // charauto d=0.5; // doubleauto national_debt=14400000000000LL; //long long自动类型推导主要用于对象类型很长很麻烦的时候,或者是对象是自动生成的时候(使用模板时)考虑下面迭代器的声明:
void fucn(const vector<int> &vi){vector<int>::const_iterator ci=vi.begin();}有了自动类型推导后,你可以这样声明:auto
ci=vi.begin();
//
哈哈,省事了
关 键字auto不是什么新生事物,我们早已认识,它实际上可以追溯到前ANSI C时代,但是,C++11改变了它的含义,auto不再指定自动存储类型对象,相反,它声明的对象类型是根据初始化代码推断而来的,C++11删除了 auto关键字的旧有含义以避免混淆。 注意了:auto已经不再是当年的auto了!C++11提供了一个类似的机制捕捉对象或表达式的类型,新的操作符decltype需要一个表达式,并返回它的类 型。
const vector<int> vi;         typedef decltype (vi.begin()) CIT;         CIT another_const_iterator;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: