这种分配方式叫什么?myVar(值);

What is this way of assignment called? myVar(value);

本文关键字:myVar 分配 方式叫 什么      更新时间:2023-10-16

我正在挖掘别人的代码,注意到他以以下方式分配类的公共/私有成员:

myMemberVar(Value);

而不是

myMemberVal=Value;

我想知道这种分配方式是否正常,是否真的可以互换使用。

您可能正在成员初始化列表中查看初始化

struct A
{
   int x, y;
   A()
     : x(42)    // <-- here
     , y(12)    // <-- and here
   {}
{};

这些不是"任务",只不过是以下任务:

void foo()
{
   int x = 42;
   int y = 42;
}

但请记住,C++03初始化语法(与上面令人困惑的遗留语法相反,看起来像赋值语法)是:

void foo()
{
   int x(42);
   int y(42);
}

而且,更进一步,由于C++11:

void foo()
{
   int x{42};
   int y{42};
}

这就是成员初始化列表中所需的语法

请注意,这意味着它们通常是可互换的:仅在初始化时!通常,当您编写=时,您正在执行赋值,并且这种初始化语法在那里是无效的。


&匕首别担心,我还是喜欢它

这是构造的语法,而不是赋值。

第一段代码没有分配任何内容;它试图像函数一样调用CCD_ 2。

也许真正的代码在构造函数的初始化程序列表中:

MyClass() : myMemberVar(Value) {}

而第二个是在构造函数主体中:

MyClass() {
    myMemberVar = Value;
}

这里的区别在于,第一个执行直接初始化,而不是赋值;第二个执行默认初始化,然后进行赋值。

对于简单类型,两者具有相同的效果,并且可以被视为可交换的。对于类类型,它们可能会调用不同的用户定义函数:第一种情况下是转换/复制/移动构造函数,第二种情况下则是默认构造函数后跟赋值运算符。根据这些功能的定义方式,这两个选项可能具有不同的效果或性能特征,如果无法访问所需的功能,则可能无法使用。