代码之家  ›  专栏  ›  技术社区  ›  bastibe

在函数名和大括号之间分配成员变量的名称和原因是什么?

  •  8
  • bastibe  · 技术社区  · 14 年前

    请看以下代码段:

    Size::Size(int iSetWidth, int iSetHeight)
    :iWidth(iSetWidth),
    iHeight(iSetHeight)
    {
    }
    

    Size::Size(int iSetWidth, int iSetHeight)
    {
        iWidth=iSetWidth;
        iHeight=iSetHeight;
    }
    

    你为什么要用前者或后者?前者叫什么名字?

    3 回复  |  直到 14 年前
        1
  •  17
  •   Gorpik    14 年前

    在执行构造函数时,在进入代码块(大括号之间的代码)之前,它会构造所有对象数据成员。在初始值设定项(冒号后面和花括号前面的代码)中,您要做的是指定为这些成员使用哪些构造函数。如果没有为特定数据成员指定构造函数,则将使用默认构造函数。

    因此,如果使用初始化列表(第一个示例),则每个成员都将使用正确的构造函数,不需要额外的代码。否则,首先使用默认构造函数,然后执行花括号中的代码。

    总而言之:

    1. 在第一个示例中,每个成员都使用适当的构造函数(可能是copy构造函数)进行初始化。
    2. 在第二个示例中,使用默认构造函数构造每个成员,然后执行一些附加代码来初始化它,可能是赋值运算符。

    编辑:对不起,最后一行忘了回答你的问题。

    如果您知道哪个是变量或数据成员的正确构造函数,请务必使用它。这就是为什么大多数类都有不同的构造函数,而不仅仅是一个默认的构造函数。所以最好使用初始化列表。

    int ). 但是,如果您使用的是类,则会有所不同,因此请习惯初始化列表。

        2
  •  3
  •   ckv    14 年前

    前者称为初始化列表。 你可以得到足够的文章。

    这里给出了使用初始化器列表的特殊原因 http://www.learncpp.com/cpp-tutorial/101-constructor-initialization-lists/

    您可以参考有效的C++来深入了解Indialisher列表。 希望这是清楚的。

        3
  •  0
  •   ylzhang    14 年前

    C++程序设计语言

    推荐文章