【c++学习】c++11的特性(1)

本文介绍了C++语言中列表初始化的新特性、Initializer_list的使用、auto关键字的自动推导类型、decltype用于获取表达式的类型、nullptr代替NULL表示空指针以及左值引用和右值引用的概念及其应用。
摘要由CSDN通过智能技术生成

列表初始化

c++98中的{}初始化

struct Point
{
 int _x;
 int _y;
};
int main()
{
 int array1[] = { 1, 2, 3, 4, 5 };
 int array2[5] = { 0 };
 Point p = { 1, 2 };
 return 0;
}

在c++11中我们可以省略(=)例如:

struct Point
{
 int _x;
 int _y;
};
int main()
{
 int x1 = 1;
 int x2{ 2 };
 int array1[]{ 1, 2, 3, 4, 5 };
 int array2[5]{ 0 };
 Point p{ 1, 2 };
 return 0}

initializer_list

vector<int> v = {1,2,3,4,5,6,7};

例如上面这种{}内参数不限定的情况下应该如何构造呢?
在这里插入图片描述
这是就会调用如上图vector的构造函数,构造一个容器,其中包含 il 中每个元素的副本,顺序相同。然后再拷贝给vector。
不仅vector拥有,map,set等一些容器也拥有。
map:
在这里插入图片描述
set:
在这里插入图片描述

auto

自动推到类型。

auto a = 1//auto表示则是int类型
auto b = ‘a’//auto则表示char类型
auto c = “abcdefg”//auto则表示字符串类型

decltype

关键字decltype将变量的类型声明为表达式指定的类型。

int main()
{
	int a = 1;
	decltype(a) b;//b则是int类型;
	decltype&a)p;//p则是int*类型。
return 0;
}

nullptr

由于C++中NULL被定义成字面量0,这样就可能回带来一些问题,因为0既能指针常量,又能表示
整形常量。所以出于清晰和安全的角度考虑,C++11中新增了nullptr,用于表示空指针。

右值引用

首先我们来看什么是左值引用:

左值是一个表示数据的表达式(如变量名或解引用的指针),我们可以获取它的地址+可以对它赋
值,左值可以出现赋值符号的左边,右值不能出现在赋值符号左边。定义时const修饰符后的左
值,不能给他赋值,但是可以取它的地址。左值引用就是给左值的引用,给左值取别名。

int main()
{
// 以下的p、b、c、*p都是左值
int* p = new int(0);
int b = 1;
const int c = 2;
// 以下几个是对上面左值的左值引用
int*& rp = p;
int& rb = b;
const int& rc = c;
int& pvalue = *p;
return 0;
}

右值引用:

右值也是一个表示数据的表达式,如:字面常量、表达式返回值,函数返回值(这个不能是左值引
用返回)等等,右值可以出现在赋值符号的右边,但是不能出现出现在赋值符号的左边,右值不能
取地址。右值引用就是对右值的引用,给右值取别名。

int main()
{
double x = 1.1, y = 2.2;
// 以下几个都是常见的右值
10;
x + y;
fmin(x, y);
// 以下几个都是对右值的右值引用
int&& rr1 = 10;
double&& rr2 = x + y;
double&& rr3 = fmin(x, y);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值