冒号在构造函数中意味着什么?

时间:2010-08-17 15:36:38

标签: c++ syntax initialization ctor-initializer

  

可能重复:
  C++ weird constructor syntax
  Variables After the Colon in a Constructor
  What does a colon ( : ) following a C++ constructor name do?

对于下面的C ++函数:

cross(vector<int> &L_, vector<bool> &backref_, vector< vector<int> > &res_) : 

    L(L_), c(L.size(), 0), res(res_), backref(backref_) {

    run(0); 

}

冒号(“:”)告诉左右两部分之间的关​​系是什么?也许,从这段代码可以说什么?

3 个答案:

答案 0 :(得分:5)

这是一种在实际调用类的c'tor之前初始化类成员字段的方法。

假设你有:

class A {

  private:
        B b;
  public:
        A() {
          //Using b here means that B has to have default c'tor
          //and default c'tor of B being called
       }
}

现在写作:

class A {

  private:
        B b;
  public:
        A( B _b): b(_b) {
          // Now copy c'tor of B is called, hence you initialize you
          // private field by copy of parameter _b
       }
}

答案 1 :(得分:4)

这是一个成员初始化列表。

您将每个成员变量设置为冒号后部分括号中的值。

答案 2 :(得分:3)

与C ++中的许多内容一样,:用于许多事情,但在您的情况下,它是初始化列表的开头。

其他用途例如在公共/私人/受保护之后,在案例标签之后,作为三元运营商的一部分,可能还有其他一些用途。