在初始化构造函数时 {} 或 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
中指定的那样。
这三种默认构造函数的方法之间是否有任何区别(无论多么微小)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
中指定的那样。