这三种默认类构造函数的方法之间是否存在差异(无论多么微小):
使用{}
直接在标题中
//foo.h
class foo{
public:
foo(){}
}
使用default
关键字直接在标题中
//foo.h
class foo{
public:
foo()=default;
}
在使用{}
//foo.h
class foo{
public:
foo();
}
//foo.cpp
#include "foo.h"
foo::foo(){}
答案 0 :(得分:6)
是的,有区别。
选项1和3是用户提供的。用户提供的构造函数非常重要,这使得类本身非常重要。这对如何处理类有一些影响。它不再是可复制的,因此无法使用memcpy
等进行复制。它也不是聚合,因此无法使用聚合初始化
第四个选项如下:
//foo.h
class foo{
public:
foo();
}
//foo.cpp
#include "foo.h"
foo::foo()=default;
虽然这可能与您的第二个示例类似,但实际上这也是用户提供的。
从功能上讲,默认构造函数与foo(){}
执行相同的操作,如[class.ctor]/6
中所指定。