在初始化构造函数时 {} 或 default 之间是否有任何差异

Is there any diffrence between {} or default in initializing constructor

这三种默认构造函数的方法之间是否有任何区别(无论多么微小)class:

直接在header中使用{}:

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

直接在header中使用default关键字:

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

在cpp中使用{}

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

//foo.cpp
#include "foo.h"
foo::foo(){}

是的,有区别。

选项 1 和 3 用户提供。用户提供的构造函数是不平凡的,使 class 本身不平凡。这对如何处理 class 有一些影响。它不再是简单可复制的,因此不能使用 memcpy 等进行复制。它也不是聚合,因此不能使用聚合初始化

进行初始化

第四个选项如下:

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

//foo.cpp
#include "foo.h"
foo::foo()=default;

虽然这看起来与您的第二个示例类似,但实际上也是用户提供的。

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