C 11 大括號和小括號的使用

2021-09-16 13:43:48 字數 1514 閱讀 1652

c++11之前主要有以下幾種初始化方式:

//小括號初始化

string str("hello");

//等號初始化

string str="hello";

//pod物件與pod陣列列表初始化

struct studnet

;studnet s=; //純資料(plain of data,pod)型別物件

studnet sarr=,}; //pod陣列

//建構函式的初始化列表

class class

};

在c++11以前,程式設計師,或者初學者經常會感到疑惑關於怎樣去初始化乙個變數或者是乙個物件。這麼多的物件初始化方式,不僅增加了學習成本,也使得**風格有較大出入,影響了**的可讀性和統一性。

從c++11開始,對列表初始化(list initialization)的功能進行了擴充,可以作用於任何型別物件的初始化,至此,列表初始化方式完成了天下大一統。

花括號列表初始化,作為c++11新標準的一部被加入到了c++中。

因為這個原因,c++11提出了統一初始化,以為著使用這初始化列表,下面的做法都是正確的。

class test

;

test t; //c++11 only,相當於 test t(0,0);

test* pt=new test; //c++11 only,相當於 test* pt=new test(1,2);

int* a = new int[3]; //c++11 only

此外,c++11列表初始化還可以應用於容器,終於可以擺脫 push_back() 呼叫了,c++11中可以直觀地初始化容器: 

//c++11 container initializer

vectorvs=;

mapsingers =,};

因此,可以將c++11提供的列表初始化作為統一的初始化方式,既降低了記憶難度,也提高的**的統一度。

此外,c++11中,類的資料成員在申明時可以直接賦予乙個預設值:

class c    

;

所謂花括號列表初始化,即是用花括號來初始化變數,其形式如: int  test =   ;無論是初始化物件還是為物件賦值 , 在c++11下都可以使用這種形式的初始值。

不同的一點 是:使用這種形式來初始化內建型別的變數時,若存在型別轉換且具有丟失資訊的風險時,編譯器將會報錯。

通過這一點可以看出,列表初始化比原有的初始化方式具有更嚴格的安全要求。下面是例子:

long double ld = 3.1415926536;

int a , b =         // 編譯器報錯,存在丟失資訊的風險

int c (ld)  , d = ld ;    //正確

shell中的大括號和小括號

2009 7 23 13 27 32 在這裡我想說的是幾種shell裡的小括號,大括號結構和有括號的變數,命令的用法,如下 1.2.cmd 3.和 4.5.exp 6.var pattern var pattern var pattern var pattern 現在分述如下 1.shell中變數的...

Python小括號 中括號 大括號和尖括號的含義

在使用python做專案的過程中發現這種語言使用了很多種型別的括號來表達資料型別,常見的有四種,分別是 小括號 中括號 和大括號,也叫做花括號,還有尖括號 其作用也各不相同,分別用來代表不同的python基本內建資料型別。1 python中的小括號 代表tuple元組資料型別,元組是一種不可變序列。...

正則中的小括號 中括號 大括號 分析

乙個示例 var reg d 18 19 20 d 0 1 9 1 012 0 1 9 1 0 9 2 0 9 3 01 d d x x 正規表示式的 有不同的意思。是為了提取匹配的字串。表示式中有幾個 就有幾個相應的匹配字串。s 表示連續的空格 製表符 其他空白。是定義匹配的字元範圍。比如 a z...