C++11常用新特性

1、列表初始化

C++11扩大了用大括号括起的列表(初始化列表)的使用范围,使其可用于所有的内置类型和用
户自定 义的类型,使用初始化列表时,可添加赋值号(=),也可以不添加。
#include<iostream>
#include<vector>
#include<map>
using namespace std;

class ClassNum {
public:
	ClassNum(int n1 = 0, int n2 = 0) : _x(n1), _y(n2){}
private:
	int _x;
	int _y;
};

int main() {
	int num1 = { 100 }; //定于内置类型
	int num2(3); //也可以不加=
	int num3{ 3 };

	//数组
	int arr1[5] = { 1,3,4,5,6 };
	int arr2[] = { 4,5,6,7,8 };
	int arr3[] { 4,5,6,7,8 };

	//STL中的容器
	vector<int> v{ 12,2 };
	map<int, int> mp{ {1,2},{3,4} };


	//自定义类型初始化
	ClassNum q(1, 2);
	ClassNum p{ 1, 2 };
	return 0;
}

2、For each

vector<int> v1={ 1,2,3,4,5,6 };
for (auto i : v1)//范围for
{
    cout << i << “ ”;
}

3、move 语义

用 = 赋值,会调用拷贝构造函数进行拷贝。

#include <iostream>
#include <vector>
using namespace std;

class XData {
public:
	int id;
	XData(int id=0) {
		this->id = id;
		cout << id<<" create" << endl;
	}
	~XData() {
		cout << id<<" drop" << endl;
	}
	XData(const XData& xd) {
		id = xd.id;
		cout << "copy" << endl;
	}
};

int main() {
	vector<XData> datas(3);
	auto ds = datas;
	cout << "datas size: " << datas.size()<<endl;
}

用move之后,datas的size变为0,不进行拷贝。

#include <iostream>
#include <vector>
using namespace std;

class XData {
public:
	int id;
	XData(int id=0) {
		this->id = id;
		cout << id<<" create" << endl;
	}
	~XData() {
		cout << id<<" drop" << endl;
	}
	XData(const XData& xd) {
		id = xd.id;
		cout << "copy" << endl;
	}
};

int main() {
	vector<XData> datas(3);
	auto ds = move(datas);
	cout << "datas size: " << datas.size()<<endl;
}

 4、可变参数模版

C++11的新特性可变参数模板能够创建可以接受可变参数的函数模板和类模版。
#include <iostream>
using namespace std;

void funcName1() {
	//cout << "递归终止函数" << endl;
}

template<class T, class...U>
void funcName1(T frist, U...others) {
	cout << "收到的参数值:" << frist << endl;
	funcName1(others...);//注意这里传进来的是一包形参不能省略... 
}

template<class T,class...U>
void funcName2(T first, U...args) {
	cout << "收到的参数值:" << first << endl;

	//c++17中新增一个语句叫做编译期间if语句( constexpr if)
	if constexpr (sizeof...(args)) {//constexpr代表的是常量的意思或者是编译时求值
		funcName2(args...);
	}
}

int main() {
	//funcName1(1, 2, 3, 4, 5, 6);
	funcName2(1, 2, 3, 4, 5, 6);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值