C++11预置和弃置函数
时间: 2024-01-11 20:55:15 浏览: 32
C++11引入了4个预置函数和2个弃置函数,分别是:
预置函数:
1.默认构造函数:用于创建一个对象,并将其成员变量初始化为默认值。
2.复制构造函数:用于创建一个新对象,并将其成员变量初始化为另一个已有对象的值。
3.复制赋值运算符:用于将一个已有对象的值赋给另一个对象。
4.析构函数:在对象被销毁时调用,用于释放对象所占用的资源。
弃置函数:
1.移动构造函数:用于创建一个新对象,并将其成员变量初始化为另一个已有对象的值,并且将原有对象的值置为默认值。
2.移动赋值运算符:用于将一个已有对象的值赋给另一个对象,并将原有对象的值置为默认值。
这些函数的存在可以让我们更方便地进行对象的创建、拷贝、赋值和销毁等操作。同时,C++11还引入了右值引用和移动语义等新特性,使得对象的移动操作更加高效。
相关问题
关于c加加11 的预置以及弃置函数,请详细说明
在C++11中,新引入了两个与对象生命周期相关的函数:预置函数和弃置函数。
预置函数(default functions)是指编译器自动生成的默认函数,包括默认构造函数、拷贝构造函数、移动构造函数、拷贝赋值运算符、移动赋值运算符和析构函数。当类中没有显式定义这些函数时,编译器会自动生成它们。
弃置函数(deleted functions)是指被显式删除的函数,例如通过在函数声明或定义后面加上`=delete`来删除一个函数。当一个函数被删除后,任何尝试调用该函数的代码都会导致编译错误。
以下是一些示例:
```c++
class MyClass {
public:
// 默认构造函数
MyClass() = default;
// 拷贝构造函数和拷贝赋值运算符被显式删除
MyClass(const MyClass&) = delete;
MyClass& operator=(const MyClass&) = delete;
// 移动构造函数和移动赋值运算符
MyClass(MyClass&&) = default;
MyClass& operator=(MyClass&&) = default;
// 析构函数
~MyClass() = default;
};
```
上面的示例中,我们使用`=default`关键字来显式声明了默认构造函数、移动构造函数、移动赋值运算符和析构函数,同时使用`=delete`关键字来显式删除了拷贝构造函数和拷贝赋值运算符。这些函数的定义可以被省略,因为它们是由编译器自动生成的。
需要注意的是,当一个类中显式定义了拷贝构造函数、移动构造函数、拷贝赋值运算符或移动赋值运算符时,编译器不会自动生成默认的版本,即使这些函数的定义被省略。因此,如果需要使用默认版本,必须使用`=default`关键字来显式声明。
关于C加加11的预置以及弃置函数,请详细说明
在C++11标准中,新增了一些预置函数和一些弃置函数,下面分别详细说明:
1. 预置函数
1.1 std::to_string
用于将数字类型转换成字符串类型,其定义如下:
```cpp
namespace std {
string to_string(int val);
string to_string(long val);
string to_string(long long val);
string to_string(unsigned val);
string to_string(unsigned long val);
string to_string(unsigned long long val);
string to_string(float val);
string to_string(double val);
string to_string(long double val);
}
```
1.2 std::stoi
用于将字符串转换成整数类型,其定义如下:
```cpp
namespace std {
int stoi(const std::string& str, std::size_t* pos = 0, int base = 10);
long stol(const std::string& str, std::size_t* pos = 0, int base = 10);
long long stoll(const std::string& str, std::size_t* pos = 0, int base = 10);
unsigned long stoul(const std::string& str, std::size_t* pos = 0, int base = 10);
unsigned long long stoull(const std::string& str, std::size_t* pos = 0, int base = 10);
}
```
1.3 std::stof
用于将字符串转换成浮点数类型,其定义如下:
```cpp
namespace std {
float stof(const std::string& str, std::size_t* pos = 0);
double stod(const std::string& str, std::size_t* pos = 0);
long double stold(const std::string& str, std::size_t* pos = 0);
}
```
2. 弃置函数
2.1 auto_ptr
在C++11中,auto_ptr被弃置,被unique_ptr替代。auto_ptr存在的问题是:当auto_ptr被复制时,会发生所有权转移,导致原指针被释放,从而产生悬垂指针的问题。
2.2 register
在C++11中,register被弃置,原因是register关键字其实并不会对程序性能有任何提升,而且register关键字有可能会与一些优化策略发生冲突。
2.3 dynamic_exception_specification
在C++11中,dynamic_exception_specification被弃置,原因是该语法的效果可以通过noexcept关键字来替代,并且noexcept关键字更加简洁明了。
以上就是C++11新增的一些预置函数和弃置函数的详细说明。