c++类构造函数的列表初始化中不是成员变量要如何理解?
问题来源于《c++ primer 5th》的习题13.44的答案,实现一个简单的string类,看答案的时候发现看不懂类的构造函数,代码如下:
class String
{
public:
String() : String("") { } // ???
String(const char *);
String(const String&);
String& operator=(const String&);
~String();
//...
private:
char *elements;
char *end;
std::allocator<char> alloc;
};
这里的构造函数:
String() : String("") { }
这样写要如何理解?我只能理解在列表初始化中给成员变量赋值的情况,这个语句有点看不懂,它做了什么事?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这个的意思是执行下面定义的
也就是默认的String s其实相当于String s("")
也就是在一个构造函数的初始化列表中可以使用其他的构造函数。
这样做的好处是能节省代码, 特别是当另一个构造函数已经有很多语句(并且完全可以应用到此构造函数中).
这是委托构造, 不是你理解的成员变量. 本是很好的东西, 但是千万不要滥用, 我见过将委托构造放到构造函数体里面的, 差点没吓死我...