写点什么

C++ primer -- 第 18 章 探讨 C++ 新标准

用户头像
Dreamer
关注
发布于: 2020 年 11 月 02 日
C++ primer -- 第18章 探讨C++新标准




终于到了《C++primer》最后的一章,本次内容依然是仅供自己的复习所用。本次的内容如下:



  • 移动语义和右值引用

  • Lambda表达式

  • 包装器模版function

  • 可变参数模版






1.C++11功能



新功能



C++新增了long long和 unsigned longlong.



统一的初始化



初始化列表



int x = {5};

double y = {2.75};

short quar[5] {2, 5, 2, 76, 1};

new初始化int ar = new int [4] {2, 4, 6, 7};



注意:

初始化列表语法可防止缩窄,但是可以转化为更宽的类型。



char c1 = 1.57e27; //double to char, undefinde behavior

char c2 = 46477878;//int to char, undefined behavior

char c1 {66}; //int-to-char, in range, allowed

double c2 = {66}; // int-to-double, allowed

std::initializer list



vector<int> a1(10);

vector<int> a2{10}; // initializer-list a2 has 1 element set to 10

vector<int> a3{4, 6, 1}; // 3 elements set 4, 6 ,1

//包含头文件的ini=tializer_list

#include <initializer_list>

double sum(std::initializer_list<double> i1)

int main()

{

double total = sum({2.5, 3. 1. 4);

...

}

声明



1.auto



关键字auto是一个存储了警说明符,用于自动类型推断



2.decltype



将变量的类型声明为表达式指定的类型,如下



decltype(x) y;//让y的类型与x相同

3.返回类型后置



在函数名和参数后面指定返回类型:



double f1(double, int); //traditional syntax

auto f2(double, int) -> double; //new syntax, return type is double

4.模版别名 using =



之前的c++语法typedef std::vector<std::string>::iterator itType;



C++ 11新语法`using itType = std::vector<std::string> iterator;



5.nullptr



空指针的表示



作用域内枚举



enum old1{yes, no, maybe}; // traditonal form

enum class New1 {never, somtime, often, always}; // new form

enum struct New2 {new, lever};// new form

需要使用时,使用New1::never和New2::never等。



对类的修改



2.右值引用和移动语义



对大多数程序员来说,右值引用带来的主要好处是能够利用右值引用来实现移动语义的库代码。



用户头像

Dreamer

关注

一个不想做搜索的NLPer不是一个好的CVer 2019.12.18 加入

还未添加个人简介

评论

发布
暂无评论
C++ primer -- 第18章 探讨C++新标准