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("") { } 

这样写要如何理解?我只能理解在列表初始化中给成员变量赋值的情况,这个语句有点看不懂,它做了什么事?

阅读 3.9k
3 个回答

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

String(const String&);

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

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

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

namespace base {
class A {
public: 
   A() {
      A(0);//error using; delegating constructor.. 
   }
   A(int i)
    : i_(i) {
   }
private:
  int i_;
};
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题