程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++11新特性之 default and delete specifiers

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

編輯:C++入門知識

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


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

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved