手机版 欢迎访问it开发者社区(www.mfbz.cn)网站

当前位置: > 开发

c++11 Initializate

时间:2021/5/27 0:47:11|来源:|点击: 次

c++11版本对变量的初始化进行了修改,使用**{}**代替初始化。

例如:
以前我们的初始化方式:
int i[] = {12,45,65,7,8};
Rect r1={1,2,3};
Rect r1(1,2,3)

现今初始化全部使用{}代替,如:
int j{} // j被初始化为0
int *q{} //q被初始化为nullptr
int values[] {1,2,3}
vectotv {2,65,4,8,6}
这样的形式

主要是因为编译器看到{t1,t2,t3,t4…tn}这种一大包的的数据后,便做出一个initializer_list的数据结构,他关联一个array<T,n>.
例如:

void print(initializer_list<int> inlist){

    for(auto it=inlist.begin(); it!=inlist.end();++it){

        cout<<*it<<endl;
    }
}
int main()
{
    print({10,45,78,56,89});
    return 0;
}
#include<iostream>
#include<initializer_list>
 
using namespace std;
 
class P {
public:
	P(int a, int b) {//1
		cout << "P(int,int),a=" << a << ",b=" << b << endl;
	}
	P(initializer_list<int> initList) {//2
		cout << "P(initializer_list<int>)\tvalues=";
		for (auto i : initList)
			cout << i << "\t";
		cout << endl;
	}
};
 
int main() {
	P p1(77, 5);//调用1
	P p2{77, 5};//调用2
	P p3{ 77,5,42 };//调用2
	P s = { 77,5 };//调用2
	return 0;
}

如果没有P(initializer_list initList) 构造函数,p1,p2,p3,s分别被怎么调用呢。这时p1,p2,s的参数仍然可以调用P(int a, int b),因为参数符合,p3就不可以了。

vector<int> v1 {2,5,7,13,69,83,50};
vector<int> v2 ({2,5,7,13,69,83,50});
vector<int> v3
v3 = {2,5,7,13,69,83,50};
v3.insert(v3.begin()+2, {2,5,7,13,69,83,50});

cout<<max({2,5,7,13,69,83,50});
cout<<min({2,5,7,13,69,83,50});

Copyright © 2002-2019 某某自媒体运营 版权所有