您的位置:首页 > 编程语言 > C语言/C++

C++11--可以这么玩初始化列表吗?

2016-07-06 00:13 417 查看
我们知道C++11新增了初始化列表,在之前的博客中也有过介绍。

浅析C++中的初始化列表(区别赋值和初始化)

c++11特性之initializer_list

今天就讨论这么用初始化列表,不喜勿喷。

先写一个类:

class SimpleType
{
private:
int a { 1 };    // << wow!
int b { 1 };    // << wow2!
string name { "string" }; // wow3!

public:
SimpleType() {
cout << "SimpleType::ctor, {"
<< a << ", "
<< b << ", \""
<< name << "\"}"
<< endl;
}
~SimpleType() {
cout << "SimpleType::destructor" << endl;
}
};


使用这个类:

SimpleType obj;


输出:

SimpleType::ctor, {1, 1, “string”}

来说说什么这么写有用:

1简洁

2你不会忘记初始成员变量

3当你有好几个构造函数的时候,这么写更有好处

对上面的类就行简单的修改:

class SimpleType
{
private:
int a { 1 };    // << wow!
int b { 1 };    // << wow2!
string name { "string" }; // wow3!

public:
SimpleType() { /* old code... */ }
SimpleType(int aa, int bb)
: a(aa), b(bb) // << custom init!
{
std::cout << "SimpleType::ctor(aa, bb), {"
<< a << ", "
<< b << ", \""
<< name << "\"}"
<< std::endl;
}
~SimpleType() {
cout << "SimpleType::destructor" << endl;
}
};


对修改后的类进行使用:

class AdvancedType
{
private:
SimpleType simple;

public:
AdvancedType() {
cout << "AdvancedType::ctor" << endl;
}
AdvancedType(int a) : simple(a, a) {
cout << "AdvancedType::ctor(a)" << endl;
}
~AdvancedType() {
cout << "AdvancedType::destructor" << endl;
}
};


使用:

AdvancedType adv;


输出:

SimpleType::ctor, {1, 1, "string"}
AdvancedType::ctor


使用:

AdvancedType advObj2(10);


输出:

SimpleType::ctor(aa, bb), {10, 10, "string"}
AdvancedType::ctor(a)


副作用:

想要一个空的成员变量的时候,比如vector等等。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: