c++类构造函数的列表初始化中不是成员变量要如何理解?

发布于 2022-09-05 21:17:19 字数 593 浏览 30 评论 0

问题来源于《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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

书信已泛黄 2022-09-12 21:17:19

这个的意思是执行下面定义的

String(const String&);

也就是默认的String s其实相当于String s("")
也就是在一个构造函数的初始化列表中可以使用其他的构造函数。

你爱我像她 2022-09-12 21:17:19

这样做的好处是能节省代码, 特别是当另一个构造函数已经有很多语句(并且完全可以应用到此构造函数中).

倾城花音 2022-09-12 21:17:19

这是委托构造, 不是你理解的成员变量. 本是很好的东西, 但是千万不要滥用, 我见过将委托构造放到构造函数体里面的, 差点没吓死我...

namespace base {
class A {
public: 
   A() {
      A(0);//error using; delegating constructor.. 
   }
   A(int i)
    : i_(i) {
   }
private:
  int i_;
};
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文