【C++新特性——统一初始化方式】

核心:{}   

#include<iostream>
using namespace std;
class person {   //非聚合化
public:
	person(int sum) :age(sum) { cout << "person(int) age->" << age << endl; };
	person(int sum, string str) :age(sum), name(str) { cout << "person(int,sting)" << endl; };
	int age;
	string name;
}p{1,"abc"};

int main()
{
	person p1(1);
	person p2 = 2;

	person p3 = { 3 };
	person p4{ 4 };

	//变量&数组&指针同理
	int arr[]{ 1,2,3,5,6 };
	int* p = new int{ 1 };
	int* array = new int[3] {1, 2, 3};

	return 0;
}

聚合化:

数组

类:{没有用户自定义构造函数,没有私有或者保护的非静态成员变量,无基类,无虚函数,

类中不能有使用{}=直接初始化的非静态数据成员(C++14开始支持)}

#include<iostream>
using namespace std;

class person {
public:
	int x;

	static int z;

//protected:
//	int y;
	
}t{1};

int person::z = 100;

int main()
{
	person p1{ 1 };
	cout << p1.x;

	//person p2{ 1,2 };  //err静态成员不属于类本身,初始化需要在全局区;

	return 0;
}

非聚合化:

需要在类的内部自定义一个构造函数, 在构造函数中使用初始化列表对类成员变量进行初始化

std::initializer_list:

size&迭代器

#include<iostream>
#include<vector>
using namespace std;
void fun(std::initializer_list<int> ls)   //应用在函数参数
{
	for (auto i = ls.begin(); i != ls.end(); i++)
		std::cout << *i << " ";
	std::cout << std::endl;
}

class person { 
public:
	person(initializer_list<int>ls)  //应用在类内构造函数
	{
		for (auto i = ls.begin(); i != ls.end(); i++)
			cout << *i << " ";
		cout << endl;
	}


};


int main()
{
	fun({ 1,2,3,4,5 });

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值