【每日C++】C++标准库

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sd4567855/article/details/86440865

【每日C++】C++标准库

标签(空格分隔):【everyday】


【每日C++】C++标准库

第一章 语言新特性

1.1 C++11 语言新特性

1.1.1 微小但重要的语法提升

  • Template 表达式内空格
//两个template表达式的闭符之间的要求消失了
vector<list<int> >; // OK in each C++ version
vector<list<int>>; // OK since C++11
  • nullptr 和 std::nullptr_t
    C++11允许使用 nullptr 取代 0 或者 NULL,用来表示一个pointer(指针)指向所谓的 no value(注意,这不同于拥有一个不确定的值)。
    nullptr 是个新关键字。它被自动转化为各种pointer类型,但是不会被转化为任何整数类型。它拥有类型std::nullptr_t,定义于.
    例如:
void f(int);
void f(void*);
f(0) //calls f(int)
f(NULL) // calls f(int) if NULL is 0, ambiguous otherwise.
f(nullptr) // calls f(void*)

1.1.2 以auto完成类型自动推导

C++11 允许声明一个变量或对象(object)而不需要指明其类型,只需要说它为 auto.
例如:

auto i = 42; // i has type int
double f();
auto d = f(); // d has type double

以auto声明的变量,其类型会根据其初值被自动推导出来,因此一定要一个初始化操作。例,auto i;//是一个错误的类型。
另外,可以为它加上额外的限定符,例如:satic auto i = 0.19.
**如果类型很长或者表达式很复杂,auto 特别有用。**例如:

vector<int> v;
auto pos = v.begin(); // pos has type vector<int>::iterator

1.1.3 一致性初始化(Uniform Initialization)和 初值列(Initializer List)

在C++11之前,一个十分容易引起混淆的问题:如何初始化一个变量或者一个对象。初始化可因为小括号、大括号、赋值操作符的出现而发生。
对此,C++11引入了“一致性初始化”(uniform initialization)的概念,意思是面对任何初始化动作,都可以使用相同的语法,也就是使用 大括号。
例如,以下皆成立:

int values[] {1,2,3};
vector<int> v {2,4,6};
vector<string> cities {"BeiJing", "ShangHai"};
complex<double> c{4.0, 3.0} // equivalent to c(4.0,3.0)

初值列(initializer list)会强迫造成所谓 value initialization,意思指即使某一个local变量属于某一种基础类型(那通常不会有不明

我的微信公众号

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/sd4567855/article/details/86440865