3

任何人都可以在这行代码中向我解释这个奇怪的位吗?

ClassA::ClassA(std::string aName) : name(aName)

显然,这是该类的声明

class ClassA
{
public:
    std::string name;
    ClassA(std::string aName);
};

奇怪的代码行出现在它的 cpp 文件中

ClassA::ClassA(std::string aName) : name(aName)

不是多态吧?但是,那是什么?

4

4 回答 4

6

这是一个带有初始化列表的构造函数:

 ClassA::ClassA(std::string aName) 
 : name(aName) // constructor initialization list
 {
   // ctor body. name is already initialized here
 }

这意味着数据成员name被初始化为aName.

它与多态性正交。

于 2013-05-03T07:49:41.463 回答
3

它是一个成员初始化器。成员

std::string name;

aName
使用 this 进行初始化,允许跳过 std::string 的默认构造函数,否则将使用该构造函数,因此这消除了一些开销。另一种选择是

ClassA::ClassA(std::string aName)
{
  // name is fist constucted with default constructor
  name = aName;  // value is assigned with operator =
}

这通常比较慢,应该避免

于 2013-05-03T07:49:53.667 回答
0

这只是初始化列表。当您指定构造函数时,您可以初始化此列表中的成员变量。

于 2013-05-03T07:49:29.340 回答
0

它是一个初始化列表,这是一种在 C++ 中初始化成员变量的简洁明了的方法

于 2013-05-03T07:52:07.297 回答