C++11新特性之 default and delete specifiers

最后更新于:2022-04-01 06:32:26

C++11的东西介绍的差不多了,今天介绍两个关键字default和delete! **default**  首先我们清楚,如果自己提供了任何形式的构造函数,那么编译器将不会产生一个默认构造函数,这是一个放之四海而皆准的原则。 但凡是都是双面性,看看一下的代码: ~~~ class A { public: A(int a){}; }; ~~~ 然后我们这样使用: ~~~ A a; ~~~ 悲剧发生了,编译器不会为我们提供默认的构造函数! 所以呢,我们要暴力一些,对编译器做一些强制的规定。这时候default关键字出场了: ~~~ class A { public: A(int a){} A() = default; }; ~~~ 于是再也不用担心下面的代码报错了: ~~~ A a; ~~~ 下面谈一谈delete  **delete**  有这样一个类: ~~~ class A { public: A(int a){}; }; ~~~ 下面的使用都会正确: ~~~ A a(10); // OK A b(3.14); // OK 3.14 will be converted to 3 a = b; // OK We have a compiler generated assignment operator ~~~ 然而,如果我们不想让上面的某种调用成功呢,比如不允许double类型作为参数呢? 你当然想到了,关键字delete: ~~~ class A { public: A(int a){}; A(double) = delete; // conversion disabled A& operator=(const A&) = delete; // assignment operator disabled }; ~~~ 这时候你使用代码: ~~~ A a(10); // OK A b(3.14); // Error: conversion from double to int disabled a = b; // Error: assignment operator disabled ~~~ 通过关键字default和delete 我们随心所欲!!!!
';