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)
是,有一点不同.
选项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.
| 归档时间: |
|
| 查看次数: |
123 次 |
| 最近记录: |