CPP 构造函数重载,如果嵌套构造函数被称为“类似 java”,则变量不会初始化

问题描述 投票:0回答:1

我在定义不同的构造函数从同一个类中相互调用时遇到问题:

class
MyClass
{ 
    public: 
    int m_a;
    inline MyClass(void) { MyClass(42); }; //java-like
    inline MyClass( int a ): m_a(a){};
};


class 
MyClass1 
{
    public: 
    int m_a;
    inline MyClass1(void) : MyClass1(42){ };
    inline MyClass1( int a ): m_a(a){};
};


MyClass mc;
MyClass1 mc1;

int main (int argc, char** argv)
{
printf("MyClass %d\n", mc.m_a); // prints 0 (42 expected)
printf("MyClass1 %d\n", mc1.m_a); // prints 42
}

为什么第一个嵌套构造函数调用失败(返回 0 而不是预期的 42?

c++ constructor
1个回答
2
投票

Delegating_constructor语法是

MyClass() : MyClass(42) {}

您当前使用“类java”方式构造临时对象。

© www.soinside.com 2019 - 2024. All rights reserved.