C++

C++,第1张

C++11为变量和对象支持了更为丰富的通过花括号列表进行初始化:

#include 
using namespace std;

int main(){

	int i1 = 1;                    //等号赋值表达式初始化
	int i2(2);                     //类似构造的圆括号表达式
	int i3 = (3);                  //等号赋值表达式初始化  
	int i4{4};                     //列表初始化
	int i5 = {5};                  //列表初始化
	int a[]{1, 2, 3};              //列表初始化
	int b[] = {4, 5, 6};           //列表初始化
	vector d{7, 8, 9};        //列表初始化
	vector e = {10, 11, 12};  //列表初始化
	return 0;
}

这种使用了花括号列表进行初始化的方式,对于自定义的类也可以实现:

#include 
#include 
#include 
using namespace std;

class Data{
public:
	Data(initializer_list l)     //自定义类的列表初始化构造函数
	{
		for(initializer_list::iterator it = l.begin(); it < l.end(); ++it)
		{
			m_array.push_back(*it);   //通过迭代列表,初始化对象
		}
	}
	void pData()
	{
		cout<<"data list:";
		for(vector::iterator it = m_array.begin(); it < m_array.end(); ++it)
		{
			cout<<*it<<" ";
		}
		cout< m_array;
};

int main(){

	Data d1 = {1, 2, 3};
	d1.pData();
	Data d2{4, 5, 6};
	d2.pData();
	return 0;
}

运行程序输出:
data list:1 2 3 
data list:4 5 6

对于花括号列表初始化,C++11有一个提升,就是会要求编译器做类型匹配的检查:

int main(){

	char a{255};             //编译报错,char的数值范围是-128~+127,255不在合法的数值范围内
	unsigned char b = {-1};  //编译报错,unsigned char的数值范围是0~255,-1不在合法的数值范围内 
	char c{1.1};             //编译报错,1.1是浮点数值,不在c的合法数值范围内
	float d = {1e48};        //编译报错,1e48是dobule数值,不在float的合法数值内
	return 0;
}

可见通过这种方式,可以强制编译器做出类型收窄的检查。
有利于在第一时间发现类型匹配的错误。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/676446.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-04-19
下一篇2022-04-19

发表评论

登录后才能评论

评论列表(0条)

    保存