0

我正在学习 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

4 回答 4

1

它被称为member initialization list。您可能会发现这个线程C++ 成员初始化列表很有用。

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

于 2013-08-16T16:50:03.950 回答
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

于 2013-08-16T16:54:22.813 回答
0

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

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

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

于 2013-08-16T16:53:57.500 回答
0

As it's already mentioned by taocp, the line refers to member initialization list.

There are couple of ways to initialize members 1. member initialization list (efficient approach) 2. using assignment e.g. players = 10

It might not make any difference for built-in types e.g. int, char but if you are assigning big objects then use member initialization list. Constructor/ Destructor gets called in assignment which is definitely not warranted

于 2013-08-16T16:56:09.100 回答