2010-08-17 126 views
5

可能重复:
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); 

} 

什么冒号( “:”)告诉关系是它的左侧和右侧部分?可能的话,这段代码可以说什么呢?

+0

投票以重复的方式结束,但原始问题的标题留下了许多不足之处。是否应该编辑? – Troubadour 2010-08-17 15:54:58

+0

嘿嘿,好的检查员 – luna 2010-08-17 16:03:24

+3

我没有看到'怪异的语法'问题的标题的主要问题。这两个问题的真正问题是,一旦你知道搜索“初始化列表”,你的问题已经解决了。不过,我认为在标题中保留“构造函数”是有帮助的。一个':'在任何情况下几乎都是不可测量的;也许拼写它'冒号'会有所帮助,我不知道。 – 2010-08-17 16:20:55

回答

4

这是在实际调用类的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 
     } 
} 
+0

谢谢,请问什么是“c'tor”? – luna 2010-08-17 15:49:53

+0

c'tor ==构造函数 – John 2010-08-17 15:51:21

+0

@John:好的,看,它确实节省了时间 – luna 2010-08-17 15:52:25

4

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

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

+0

不客气! – John 2010-08-17 15:52:08

3

像在C++中很多东西,:用于很多事情,但在你的情况下,它是一个开始初始化器列表。

其他用途例如在public/private/protected之后,在作为三元运算符的一部分的案例标签之后,并且可能还有其他用途。

+0

注意:主题被修改后,我的答案更具体。 – 2010-08-17 15:40:23

相关问题