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 我們隨心所欲!!!!