C++學(xué)習(xí)筆記(二)

1 數(shù)據(jù)類型

枚舉類型
枚舉類型
枚舉類型(enumeration)是C++中的一種派生數(shù)據(jù)類型缰雇,它是由用戶定義的若干枚舉常量的集合。
如果一個(gè)變量只有幾種可能的值,可以定義為枚舉(enumeration)類型。所謂"枚舉"是指將變量的值一一列舉出來(lái)沙绝,變量的值只能在列舉出來(lái)的值的范圍內(nèi)。
創(chuàng)建枚舉鼠锈,需要使用關(guān)鍵字 enum闪檬。枚舉類型的一般形式為:
enum enum-name { list of names } var-list;
在這里,enum-name 是枚舉類型的名稱购笆。名稱列表 { list of names } 是用逗號(hào)分隔的粗悯。
例如,下面的代碼定義了一個(gè)顏色枚舉同欠,變量 c 的類型為 color样傍。最后,c 被賦值為 "blue"行您。

enum color { red, green, blue } c;
c = blue;

默認(rèn)情況下,第一個(gè)名稱的值為 0剪廉,第二個(gè)名稱的值為 1娃循,第三個(gè)名稱的值為 2,以此類推斗蒋。但是捌斧,您也可以給名稱賦予一個(gè)特殊的值笛质,只需要添加一個(gè)初始值即可。例如捞蚂,在下面的枚舉中妇押,green 的值為 5。

enum color { red, green=5, blue };

2 const 關(guān)鍵字

您可以使用 const 前綴聲明指定類型的常量姓迅,如下所示:
const type variable = value
例子:

#include <iostream>
using namespace std;

int main()
{
   const int  LENGTH = 10;
   const int  WIDTH  = 5;
   const char NEWLINE = '\n';
   int area;  
   
   area = LENGTH * WIDTH;
   cout << area;
   cout << NEWLINE;
   return 0;
}

請(qǐng)注意敲霍,把常量定義為大寫字母形式,是一個(gè)很好的編程實(shí)踐丁存。

3 C++ 中的類型限定符

類型限定符提供了變量的額外信息肩杈。

限定符 含義
const const 類型的對(duì)象在程序執(zhí)行期間不能被修改改變。
volatile 修飾符 volatile 告訴編譯器解寝,變量的值可能以程序未明確指定的方式被改變扩然。
restrict 由 restrict 修飾的指針是唯一一種訪問(wèn)它所指向的對(duì)象的方式。只有 C99 增加了新的類型限定符 restrict聋伦。

4 C++ 存儲(chǔ)類

存儲(chǔ)類定義 C++ 程序中變量/函數(shù)的范圍(可見性)和生命周期夫偶。這些說(shuō)明符放置在它們所修飾的類型之前。下面列出 C++ 程序中可用的存儲(chǔ)類:

  • auto
  • register
  • static
  • extern
  • mutable
  • thread_local (C++11)
    從 C++ 11 開始觉增,auto 關(guān)鍵字不再是 C++ 存儲(chǔ)類說(shuō)明符兵拢,且 register 關(guān)鍵字被棄用。

4.1 static 存儲(chǔ)類

static 存儲(chǔ)類指示編譯器在程序的生命周期內(nèi)保持局部變量的存在抑片,而不需要在每次它進(jìn)入和離開作用域時(shí)進(jìn)行創(chuàng)建和銷毀卵佛。因此,使用 static 修飾局部變量可以在函數(shù)調(diào)用之間保持局部變量的值敞斋。
static 修飾符也可以應(yīng)用于全局變量截汪。當(dāng) static 修飾全局變量時(shí),會(huì)使變量的作用域限制在聲明它的文件內(nèi)植捎。
在 C++ 中衙解,當(dāng) static 用在類數(shù)據(jù)成員上時(shí),會(huì)導(dǎo)致僅有一個(gè)該成員的副本被類的所有對(duì)象共享焰枢。

#include <iostream>
 
// 函數(shù)聲明 
void func(void);
 
static int count = 10; /* 全局變量 */
 
int main()
{
    while(count--)
    {
       func();
    }
    return 0;
}
// 函數(shù)定義
void func( void )
{
    static int i = 5; // 局部靜態(tài)變量
    i++;
    std::cout << "變量 i 為 " << i ;
    std::cout << " , 變量 count 為 " << count << std::endl;
}

結(jié)果如下:

變量 i 為 6 , 變量 count 為 9
變量 i 為 7 , 變量 count 為 8
變量 i 為 8 , 變量 count 為 7
變量 i 為 9 , 變量 count 為 6
變量 i 為 10 , 變量 count 為 5
變量 i 為 11 , 變量 count 為 4
變量 i 為 12 , 變量 count 為 3
變量 i 為 13 , 變量 count 為 2
變量 i 為 14 , 變量 count 為 1
變量 i 為 15 , 變量 count 為 0

4.2 extern 存儲(chǔ)類

extern 存儲(chǔ)類用于提供一個(gè)全局變量的引用蚓峦,全局變量對(duì)所有的程序文件都是可見的。當(dāng)您使用 'extern' 時(shí)济锄,對(duì)于無(wú)法初始化的變量暑椰,會(huì)把變量名指向一個(gè)之前定義過(guò)的存儲(chǔ)位置。
當(dāng)您有多個(gè)文件且定義了一個(gè)可以在其他文件中使用的全局變量或函數(shù)時(shí)荐绝,可以在其他文件中使用 extern 來(lái)得到已定義的變量或函數(shù)的引用一汽。可以這么理解低滩,extern 是用來(lái)在另一個(gè)文件中聲明一個(gè)全局變量或函數(shù)召夹。
extern 修飾符通常用于當(dāng)有兩個(gè)或多個(gè)文件共享相同的全局變量或函數(shù)的時(shí)候岩喷,如下所示:
第一個(gè)文件:main.cpp

#include <iostream>
 
int count ;
extern void write_extern();
 
int main()
{
   count = 5;
   write_extern();
}

第二個(gè)文件:support.cpp

#include <iostream>
 
extern int count;
 
void write_extern(void)
{
   std::cout << "Count is " << count << std::endl;
}

4.3 mutable 存儲(chǔ)類

mutable 說(shuō)明符僅適用于類的對(duì)象,這將在本教程的最后進(jìn)行講解监憎。它允許對(duì)象的成員替代常量纱意。也就是說(shuō),mutable 成員可以通過(guò) const 成員函數(shù)修改鲸阔。

4.4 thread_local 存儲(chǔ)類

使用 thread_local 說(shuō)明符聲明的變量?jī)H可在它在其上創(chuàng)建的線程上訪問(wèn)偷霉。 變量在創(chuàng)建線程時(shí)創(chuàng)建,并在銷毀線程時(shí)銷毀隶债。 每個(gè)線程都有其自己的變量副本腾它。
thread_local 說(shuō)明符可以與 static 或 extern 合并。
可以將 thread_local 僅應(yīng)用于數(shù)據(jù)聲明和定義死讹,thread_local 不能用于函數(shù)聲明或定義瞒滴。
以下演示了可以被聲明為 thread_local 的變量:

thread_local int x;  // 命名空間下的全局變量
class X
{
    static thread_local std::string s; // 類的static成員變量
};
static thread_local std::string X::s;  // X::s 是需要定義的

void foo()
{
    thread_local std::vector<int> v;  // 本地變量
}

5 C++ 運(yùn)算符

運(yùn)算符是一種告訴編譯器執(zhí)行特定的數(shù)學(xué)或邏輯操作的符號(hào)。C++ 內(nèi)置了豐富的運(yùn)算符赞警,并提供了以下類型的運(yùn)算符:

  • 算術(shù)運(yùn)算符
  • 關(guān)系運(yùn)算符
  • 邏輯運(yùn)算符
  • 位運(yùn)算符
  • 賦值運(yùn)算符
  • 雜項(xiàng)運(yùn)算符

6 C++引用

引用變量是一個(gè)別名妓忍,也就是說(shuō),它是某個(gè)已存在變量的另一個(gè)名字愧旦。一旦把引用初始化為某個(gè)變量世剖,就可以使用該引用名稱或變量名稱來(lái)指向變量。

6.1 C++ 引用 vs 指針

引用很容易與指針混淆笤虫,它們之間有三個(gè)主要的不同:

  • 不存在空引用旁瘫。引用必須連接到一塊合法的內(nèi)存。
  • 一旦引用被初始化為一個(gè)對(duì)象琼蚯,就不能被指向到另一個(gè)對(duì)象酬凳。指針可以在任何時(shí)候指向到另一個(gè)對(duì)象。
  • 引用必須在創(chuàng)建時(shí)被初始化遭庶。指針可以在任何時(shí)間被初始化宁仔。

6.2 C++ 中創(chuàng)建引用

試想變量名稱是變量附屬在內(nèi)存位置中的標(biāo)簽,您可以把引用當(dāng)成是變量附屬在內(nèi)存位置中的第二個(gè)標(biāo)簽峦睡。因此翎苫,您可以通過(guò)原始變量名稱或引用來(lái)訪問(wèn)變量的內(nèi)容。例如:
int i = 17;
我們可以為 i 聲明引用變量榨了,如下所示:
int& r = i;
引用通常用于函數(shù)參數(shù)列表和函數(shù)返回值煎谍。下面列出了 C++ 程序員必須清楚的兩個(gè)與 C++ 引用相關(guān)的重要概念:

概念 描述
把引用作為參數(shù) C++ 支持把引用作為參數(shù)傳給函數(shù),這比傳一般的參數(shù)更安全龙屉。
把引用作為返回值 可以從 C++ 函數(shù)中返回引用呐粘,就像返回其他數(shù)據(jù)類型一樣。

7 C++ 日期 & 時(shí)間

C++ 標(biāo)準(zhǔn)庫(kù)沒(méi)有提供所謂的日期類型。C++ 繼承了 C 語(yǔ)言用于日期和時(shí)間操作的結(jié)構(gòu)和函數(shù)事哭。為了使用日期和時(shí)間相關(guān)的函數(shù)和結(jié)構(gòu),需要在 C++ 程序中引用 <ctime> 頭文件瓜富。
有四個(gè)與時(shí)間相關(guān)的類型:clock_t鳍咱、time_t、size_t 和 tm与柑。類型 clock_t谤辜、size_t 和 time_t 能夠把系統(tǒng)時(shí)間和日期表示為某種整數(shù)。

詳情

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末价捧,一起剝皮案震驚了整個(gè)濱河市丑念,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌结蟋,老刑警劉巖脯倚,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異嵌屎,居然都是意外死亡推正,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門宝惰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)植榕,“玉大人,你說(shuō)我怎么就攤上這事尼夺∽鸩校” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵淤堵,是天一觀的道長(zhǎng)寝衫。 經(jīng)常有香客問(wèn)我,道長(zhǎng)粘勒,這世上最難降的妖魔是什么竞端? 我笑而不...
    開封第一講書人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮庙睡,結(jié)果婚禮上事富,老公的妹妹穿的比我還像新娘。我一直安慰自己乘陪,他們只是感情好统台,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著啡邑,像睡著了一般贱勃。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,764評(píng)論 1 290
  • 那天贵扰,我揣著相機(jī)與錄音仇穗,去河邊找鬼。 笑死戚绕,一個(gè)胖子當(dāng)著我的面吹牛纹坐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播舞丛,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼耘子,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了球切?” 一聲冷哼從身側(cè)響起谷誓,我...
    開封第一講書人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎吨凑,沒(méi)想到半個(gè)月后捍歪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鸵钝,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年费封,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蒋伦。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡弓摘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出痕届,到底是詐尸還是另有隱情韧献,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布研叫,位于F島的核電站锤窑,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏嚷炉。R本人自食惡果不足惜渊啰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望申屹。 院中可真熱鬧绘证,春花似錦、人聲如沸哗讥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)杆煞。三九已至魏宽,卻和暖如春腐泻,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背队询。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工派桩, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蚌斩。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓窄坦,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親凳寺。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容