在构造函数中使用类成员名称

Dan*_*ani 2 c++ constructor

我知道这个,因为这会将构造函数参数分配给类成员:

class A
{
    public:
        some_type B;
        A(some_type B)
        {
            this->B = B;
        }
}
Run Code Online (Sandbox Code Playgroud)

但这会做什么:

class A
{
    public:
        some_type B;
        A(some_type B) : B(B)
        {
        }
}
Run Code Online (Sandbox Code Playgroud)

这会将参数分配给自身或参数给类成员还是做其他事情?
构造之后的列表中的名称(我不知道它的调用方式)是如何解决的?

Alo*_*ave 9

Thing在C++中称为成员初始化列表.

使用初始化程序列表(第2个示例)初始化成员并在构造函数体内为其赋值(第1个示例)之间存在差异.

通过初始化列表初始化字段时,构造函数将被调用一次.使用传递的参数构造对象.

如果使用赋值,则首先使用默认构造函数初始化字段,然后使用实际值重新分配(通过赋值运算符).

如您所见,在后者中存在创建和分配的额外开销,这对于用户定义的类可能是相当大的.


构造之后的列表中的名称(我不知道它的调用方式)是如何解决的?

public:
    some_type B;
    A(some_type B) : B(B)
    {
    }
Run Code Online (Sandbox Code Playgroud)

在上面的snipet中,有两个实体名为B:

  1. 首先是构造函数作为参数接收的那个&
  2. 第二是班上的成员 A

作为构造函数中的参数接收的变量作为A构造B(通过调用其构造函数)构成类的参数传递A.这里的名称没有歧义,构造函数的全部是:

this->B(B);
Run Code Online (Sandbox Code Playgroud)
  1. thisclass A指针.
  2. B()是类型的构造函数B.
  3. B括号内是一个类型的实例B.