请说明C加加11中的default 以及delete,请详细说明
时间: 2023-11-28 07:48:29 浏览: 84
在C++11中,default和delete是两个新的函数限定符,它们可以用来显式地定义默认构造函数、拷贝构造函数、移动构造函数、拷贝赋值运算符、移动赋值运算符和析构函数的行为。
1. default函数
当我们在类定义中声明一个函数为default时,编译器会自动生成一个默认实现。例如,我们可以使用default来声明默认构造函数:
```cpp
class MyClass {
public:
MyClass() = default;
};
```
这里,我们告诉编译器生成默认构造函数的实现,而不是手动编写它的代码。如果我们没有显式地声明默认构造函数,编译器会自动生成一个默认构造函数。
2. delete函数
当我们在类定义中声明一个函数为delete时,编译器会禁止该函数的使用。例如,我们可以使用delete来禁止拷贝构造函数的使用:
```cpp
class MyClass {
public:
MyClass(const MyClass&) = delete;
};
```
这里,我们告诉编译器禁止拷贝构造函数的使用,因为我们不想让该类对象被拷贝。如果我们试图拷贝一个MyClass对象,编译器将会报错。
需要注意的是,default和delete函数只能用于特殊成员函数(默认构造函数、拷贝构造函数、移动构造函数、拷贝赋值运算符、移动赋值运算符和析构函数)。此外,它们也可以用于普通的成员函数,但需要满足一定的条件。例如,我们可以使用delete来禁止某些参数类型的使用:
```cpp
class MyClass {
public:
void func(int x) = delete;
void func(double x) {
// do something
}
};
```
这里,我们禁止了int类型的func函数,只允许使用double类型的func函数。如果我们试图调用func函数并传入一个int类型的参数,编译器将会报错。
阅读全文