【问题标题】:What does the colon mean in a constructor? [duplicate]构造函数中的冒号是什么意思? [复制]
【发布时间】:2011-03-31 01:45:04
【问题描述】:

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

}

冒号(“:”)表示左右部分之间的关​​系是什么?并且可能,从这段代码可以说什么?

【问题讨论】:

  • 投票结束作为重复但原始问题的标题还有很多不足之处。也许应该编辑它?
  • 我认为“奇怪的语法”问题的标题没有什么大问题。这两个问题的真正问题是,一旦您知道要搜索“初始化程序列表”,您的问题就已经解决了。不过,我认为在标题中保留“构造函数”是有帮助的。 : 在任何情况下都几乎无法搜索;也许拼写它colon 会有所帮助,我不知道。

标签: c++ syntax initialization ctor-initializer


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 谢谢,请问什么是“c'tor”?
    • @John:好的,看,它确实节省了时间
    【解决方案3】:

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

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

    【讨论】:

    • 注意:主题在我的回答之后被修改,更具体。
    猜你喜欢
    • 2020-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-25
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    • 2017-05-29
    相关资源
    最近更新 更多