c++ - 从同一类中的另一个构造函数调用一个构造函数

标签 c++ class constructor compiler-errors

1)第一个代码

class A
{
public:
    int i;
    int b;
    A(int temp){
        i=temp;
        A();
        b=0;
    }

    A(){
        b=0;
    }

    void display(){
        printf("%d %d\n",i,b);//1 0
    }
};

int  main(){
    A Aobj(1);
    Aobj.display();
    return 0;
}

输出:1 0

2)第二个代码

class A
{
public:
    int i;
    int b;
    A(int temp) : i(temp), A(), b(0) {}//Error
    A() : b(0) {}
    void display(){
        printf("%d %d\n",b,i);
    }
};

int  main()
{
    A Aobj(1);
    Aobj.display();
    return 0;
}

我期望这两个代码将显示相同的行为,并且会产生错误,因为不允许从同一类中的另一个构造函数调用一个构造函数。 这不是 C++11。

那么为什么使用初始化列表会产生影响呢? 我在 g++ 4.3.4 中编译了这些代码。

最佳答案

A(); 没有按照您的想法进行操作。

将其替换为 double();char(); 或任何其他类型。请注意,它有效。

您所做的就是创建该类型的一个匿名附加实例,然后将其丢弃。它对 this 没有任何影响,并且不会做您认为它会做的事情。

初始化列表在 C++11 中按照您期望的方式工作。

关于c++ - 从同一类中的另一个构造函数调用一个构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13328118/

相关文章:

c++ - 为什么成员类型需要前向声明,而成员函数不需要?

ios - UIPageViewControllerDelegate 应该属于哪个类

class-design - 一个类应该有多少个构造函数?

c++ - 引用结构大小的更好方法(#pragma pack VS 定义的大小)

c++ - QUdpSocket。如何获取发件人的IP地址?

arrays - 列出一个类的所有元素并将它们存储在一个数组中以一次性设置外观属性

c++:没有重载函数的实例?

python - 类名作为幂等类型转换函数

c++ - 我怎样才能根据用户输入生成 "weighted"随机数,使某些数字优先于其他数字?

c++ - 用 C++11 信号替换 boost-signals2