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

时间:2015-02-06 10:58:39

标签: c++ class assignment-operator

我正在挖掘其他人的代码,我注意到他以下列方式分配了一个班级的公共/私人成员:

myMemberVar(Value);

而不是

myMemberVal=Value;

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

3 个答案:

答案 0 :(得分:2)

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

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};
}

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

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


别担心,我仍然喜欢它!

答案 1 :(得分:0)

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

答案 2 :(得分:0)

第一段代码不分配任何内容;它试图像函数一样调用myMemberVar

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

MyClass() : myMemberVar(Value) {}

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

MyClass() {
    myMemberVar = Value;
}

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

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