C C C 2 0新特性學習

2022-01-16 07:18:22 字數 2373 閱讀 1255

編譯器支援的c++版本,我們只需要列印__cplusplus常量就可以知曉:

cout<<__cpluscplus《如果列印2011**則是c++11版本,列印2014**就是c++14版本,列印1997**則是c++1.0版本。

如果使用新版本的ide,列印發現是1997**,則說明ide要開啟c++2.0的支援,需要進行配置,可以google以下如果配置即可。

在之前的c++版本中,使用模板可以實現對任意型別資料引數的傳遞。在2.0版本中,我們可以傳入不定數量的模板引數:

#include #include

using

namespace

std;

//3.必須定義乙個無引數的空print函式來處理遞迴最後args中引數為0個的情況

void

print(){}

//1.從第二個引數開始,可以傳入任意個數的引數,而且型別是任意的。注意'...'的位置

template//

2.這個函式完成了乙個遞迴的操作,每次將args引數包中的第乙個分離出來,剩下的再次遞迴

//但是這裡要非常注意,當args中的引數為0個時,則會呼叫上面的print()無引數版,所以這個無引數版的print()一定要定義,否則編譯出錯

void print(const t &firstarg, const types &... args)

intmain()

這裡最需要注意的就是"..."的位置,以及最後遞迴收斂時的無引數print()函式。

實現乙個簡單的tuple類。用於同時儲存不同型別、不同數量的資料。

#include #include 

using

namespace

std;

template

class

mytuple;

template

<>

class mytuple<>;

//定義乙個模板,包含乙個型別head和一包型別tail

template//

定義乙個類,繼承於比他自己少第乙個引數的父類

class mytuple: private mytuple

//建構函式,v賦值給m_head,vtail傳遞給父類建構函式

mytuple(head v, tail... vtail) : m_head(v), inherited(vtail...) {}

//獲取當前m_head

head head()

//return後,轉型為父類型別,這樣再次獲取head(),就可以獲取到下乙個m_head

inherited &tail()

protected

:

//第乙個元素

head m_head;

};int

main()

在2.0版本以前,表示空指標可以使用0和null:

//

以前使用的兩種初始化指標為空的方式

void * ptr =null;

void * ptr = 0;

在2.0中,空指標有乙個特殊的值來代替,就是nullptr:

void * ptr1 =null;

void * ptr2 = 0

;void * ptr3 = nullptr;

//c++2.0的新關鍵字

另外還有乙個nullptr_t是nullptr的型別,即decltype(nullptr),值是void *。

這樣就可以通過這個初始化的值來區分需要呼叫的函式,例如:

void * func(int

);void *func(void *);

func(

0); //

呼叫func(int)

func(null); //

呼叫func(int)

func(nullptr); //

呼叫func(void *)

auto關鍵字是c++2.0的新的關鍵字,用來自動推導變數的型別。

例如:

auto i = 43; //

i是int

double

f();

auto d = f(); //

d是double型別,自動從f()的返回值推導

推導比較長的型別(偷懶):

vectorv;

auto pos = v.begin(); //

pos的型別為vector::iterator

推導很難的型別:

auto lf = (int x)->bool;  //

lf的型別時lambda函式

C C 2 0新特性與C 3 5新特性

c 2.0新特性與c 3.5新特性 一 c 2.0 新特性 1 泛型 listobj list new list obj list.add new myobject 2 部分類 partial namespace set 或在另乙個檔案中 public partial class class1 3 ...

C 2 0的新特性

c 2.0的新特性 1 區域性型別 就是把乙個類 介面,結構 分成幾部分,系統編譯時自動的組合 利用關鍵字partial修飾 partial class a partial class a 只要類的一部分繼承乙個父類,那整個類都繼承。沒一部分都可以繼承乙個介面,則整個類繼承所有介面 類的一部分一但被...

Django 2 0 的新特性

1 url編寫進行了簡化 新django.urls.path 功能允許更簡單,更可讀的url路由語法。例如,以前的django發行版中的這個例子 url r articles p 0 9 views.year archive 需要匯入 from django.conf.urls import url...