在初始化构造函数中,{}或默认值之间是否有任何差异

Hum*_*awi 4 c++ constructor default initialization c++11

在这三种默认类的构造函数的方法之间是否存在任何差异(无论多么微小):

直接在标题中使用{}:

//foo.h
class foo{
public:
    foo(){}
}
Run Code Online (Sandbox Code Playgroud)

使用default关键字直接在标题中:

//foo.h
class foo{
public:
   foo()=default;
}
Run Code Online (Sandbox Code Playgroud)

在cpp中使用 {}

//foo.h
class foo{
public:
   foo();
}

//foo.cpp
#include "foo.h"
foo::foo(){}
Run Code Online (Sandbox Code Playgroud)

Tar*_*ama 6

是,有一点不同.

选项1和3由用户提供.用户提供的构造函数非常重要,这使得类本身非常重要.这对如何处理类有一些影响.它不再是可轻易复制的,因此不能使用memcpy等进行复制.它也不是聚合,因此无法使用聚合初始化进行初始化

第四个选项如下:

//foo.h
class foo{
public:
   foo();
}

//foo.cpp
#include "foo.h"
foo::foo()=default;
Run Code Online (Sandbox Code Playgroud)

虽然这可能与您的第二个示例类似,但实际上这也是用户提供的.

在功能上,默认构造函数与您的foo(){}指定执行相同的操作[class.ctor]/6.