0

我查看了许多问答,但我找不到这个问题的确切答案。

对于这样的课程:

class A {
     public:
     int i;
     inline A() : i() {}
};

在普通的 C++98 中,如何保证在声明时以最紧凑的方式调用默认(无参数)构造函数?

A a;       //Is this guaranteed to call the default (argument-less) constructor?

A b();     //This is not what I want, the compiler thinks it's a function declaration
           //http://stackoverflow.com/a/877538/2436175

A c = A(); //This I know it works

(对于它的价值,我在这里尝试过,在这种情况下它有效,但谁知道堆栈中有哪些值......)

注意:A 类最终必须比示例中显示的更复杂。

4

2 回答 2

1
A a;       //Is this guaranteed to call the default constructor?

这是正确的,它将调用默认构造函数(或所有参数都具有默认值的构造函数)。

如果你想像这样构造你的对象,你必须提供一个默认构造函数(没有参数的构造函数)或者让实现为你合成一个(为此你不能为你的类定义任何构造函数)。

此外,就像其他人在评论中所说的那样,这也适用于 POD(普通的旧数据结构)。

对于要被视为 POD 的结构,它不能具有虚函数、基类、私有或受保护的非静态成员、析构函数或构造函数。

于 2013-08-01T16:03:20.397 回答
1

第 1 行)调用默认构造函数(或 Joachim 所述的具有所有默认参数的构造函数)

第 2 行)如您所述 - 不是构造函数调用

第 3 行)构造和赋值 - 因此将调用默认构造函数和复制构造函数(除非编译器优化了复制构造)。正如评论中所指出的 - 如果(使用 C++11),移动构造函数可用,它将被调用。

于 2013-08-01T16:03:40.487 回答