放牧代码和思想
专注自然语言处理、机器学习算法

C++11新特性——《C++ Primer中文版(第5版)》试读

十年磨一剑,时隔十年的C++11终于在今年发布了。在CSDN上看到《C++ Primer中文版(第5版)》马上要出版,连样章都发布了,于是粗略地翻了一下。样章只有前四章,加上水平有限,只看到新标准加入了很多新关键字,修改了旧标准的一些饱受诟病的地方,没看到我最关心的STL有无改进。等闲下来了再去仔细看吧,这里罗列了一下样章里的C++11新特性。

1、新定义了数据类型 long long

2、列表初始化——用花括号来初始化变量

C/C++ code?

1
vector<string> articles = {"a""an""the"};


3、右值引用

C/C++ code?

1
2
3
int ival = 1024;
int &refVal = ival;    // refVal 指向 ival (是 ival 的另名字)
int &refVal2;    //报错::引用必须被初始化


4、空指针关键字
得到空指针最直接的办法就是用字面值 nullptr 来初始化指针,这也是 C++11 新标准刚 刚引入的一种方法。

C/C++ code?

1
int *p1 = nullptr;// 等价于 int *p1 = 0;


5、constexpr 类型
C++11 新标准规定,允许将变量声明为 constexpr 类型以便由编译器来验证变量的值是否是一个常量表达式。声明为  constexpr 的变量一定是一个常量,而且必须用常量表达式初始化:

C/C++ code?

1
2
3
constexpr int    mf = 20;    //    20 是常量表达式
constexpr int    limit = mf +    1;    //    mf + 1 是常量表达式
constexpr int    sz = size () ;    //    只有当 size 是constexpr函数才是一条正确的声明语句


6、auto 类型说明符
auto 让编译器通过初始值来推算变量的类型。

C/C++ code?

1
2
//由vail和val2相加的结果可以推断出item的类型
auto item = vail + va12; // item初始化为vail和val2相加的结果


7、decltype类型指示符
作用是选择并返回操作数的数据类型。

C/C++ code?

1
decltype (f()) sum = x; // sum的类型就是函数f的返回类型


8、类内初始值
创建对象时,类内初始值将用于初始化数据成员。没有初始值的成员将被默认初始化
9、范围for (range for)语句

C/C++ code?

1
2
for (auto c : str)    //对于str中的每个字符
cout<<c<<endl;    // 输出当前字符,后面紧跟一个换行符


10、两个新函数cbegin 和 cend

C/C++ code?

1
auto it3 =v.cbegin(); // it3 的类型是 vector<int>::const_iterator


11、标准库函数 begin 和 end

C/C++ code?

1
2
3
int ia[] ={0,1,2,3,4,5,6,7,8,9}; // ia 是一个含有 10 个数的数组
int *beg =begin(ia);// 指向 ia 首元素的指针
int *last =end(ia);//指向 arr 尾元素的下一位置的指针


12、商一律向 0 取整(即直接切除小数部分)

C/C++ code?

1
21 % -5;    /* 结果是 1 */


13、允许使用作用域运算符来获取类成员的大小
14、 vector<vector<int>>不用写成vector<vector<int> > 也对

知识共享许可协议 知识共享署名-非商业性使用-相同方式共享码农场 » C++11新特性——《C++ Primer中文版(第5版)》试读

分享到:更多 ()

评论 2

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    个人以为C++11最好的改进点是引进了lambda,从此STL里的算法焕发了第二春

    令狐4年前 (2013-10-25)回复
    • 的确,这样使用std::sort就方便了很多

      hankcs4年前 (2013-10-26)回复

我的开源项目

HanLP自然语言处理包基于DoubleArrayTrie的Aho Corasick自动机