基本的c ++构造函数表示法

时间:2013-08-16 16:48:25

标签: c++ visual-c++

我正在学习c ++而我正在查看以下网页:

http://msdn.microsoft.com/en-us/library/vstudio/bb384842.aspx

该页面上给出的代码在步骤7中包含以下代码行。

Cardgame::Cardgame(int players)
    : players(players)
{
    totalParticipants += players;
    cout << players << " players have started a new game.  There are now "
          << totalParticipants << " players in total." << endl;
}

据我所知,第一行对应一个对象构造函数,它接受一个整数参数。但是,我不能直接了解该行

: players(players)

这种符号是什么意思?有人可以用尽可能简单的方式向我解释这个吗?

4 个答案:

答案 0 :(得分:1)

它被称为member initialization list。您可能会发现此帖子C++ member initialization list很有用。

在您发布的代码中,它会使用输入值players初始化类成员players。 (顺便说一句,使用相同名称的风格不好)。

答案 1 :(得分:1)

它被称为成员初始化列表

它用于通过为其选择最佳初始化程序来初始化类的成员。在这里,您使用相同的参数初始化您的成员players。 (选择相同名称可能会让人感到困惑,这不是一个很好的做法。)

来自标准:

  

12.6.2初始化基础和成员[class.base.init]

     

在类的构造函数的定义中,直接和虚拟基础子对象和非静态数据成员的初始化程序可以由ctor-initializer指定,其格式为

ctor-initializer:
    mem-initializer-list

mem-initializer-list:
    mem-initializer ...opt
    mem-initializer , mem-initializer-list ...opt

mem-initializer:
    mem-initializer-id ( expression-listopt)
    mem-initializer-id braced-init-list

mem-initializer-id:
    class-or-decltype
    identifier

我真的建议你阅读这篇帖子的第一篇文章,并通过引用 Scott Meyers 来解释它:http://www.cplusplus.com/forum/articles/17820/

您可以在此处获取更多信息:http://en.cppreference.com/w/cpp/language/initializer_list

答案 2 :(得分:0)

这是指initialization list,它是初始化对象成员的另一种形式。

初始化列表优于正常构造的优点是它通常很快,因为它在初始化成员之前不会创建临时对象。

缺点可能是this指针在初始化列表中要小心使用

答案 3 :(得分:0)

正如taocp已经提到的那样,该行指的是成员初始化列表。

有几种方法可以初始化成员 成员初始化列表(有效方法) 2.使用分配,例如球员= 10

内置类型可能没有任何区别,例如: int,char 但是如果要分配大对象,则使用成员初始化列表。在赋值中调用构造函数/析构函数,这绝对不是保证