chapter-2

C++ Primer第二章!

#include "stdafx.h"
#include<iostream>

using namespace std;

int main()
{
    bool bl = true;
    char c = 'c';           //與機器字節一樣,大多數機器字節由8比特構成。
    wchar_t wc = 'c';
    char16_t c16 = 'c';     //為Unicode字符集服務。可以儲存unicode的字符,而char也只能儲存ANSI字符!
    char32_t c32 = 'c';     //為Unicode字符集服務。
    short st = 1;
    int it = 1;
    long lt = 1;
    long long llt = 1;
    float ft = 0.1;         //1字節表示,7個有效位。
    double dt = 0.1;        //2字節表示,16個有效位。
    long double ldt = 0.1;

    //應該避免混用帶符號類型和無符號類型!在無符號類型進行減法運算時,應該保證不為負數!
    unsigned char i1 = -1;
    cout << int(i1) << endl;        //unsigned char,賦值-1,所得結果為255。10000001原碼-11111110反碼-11111111補碼

    unsigned u2 = 10;
    int i2 = -42;
    cout << i2 + i2 << endl;
    cout << u2 + i2 << endl;            //int值轉換為無符號值,導致異常結果

    unsigned u3 = 42, u4 = 10;
    cout << u3 - u4 << endl;
    cout << u4 - u3 << endl;            //必須確保無符號變量不可能為負值,否者會導致未知錯誤,當應用于循環時尤其注意。
    
    //初始化不是賦值,初始化是創建變量時賦予一個初始值,而賦值是把對象的當前值擦除并以一個新值取代。
    int i3 = 1;
    int i4(1);
    int i5 = { 0 };                     //列表初始化,C11新規定。列表初始化,當發生精度損失時,會報告錯誤!
    int i6{ 0 };

    double pi = 3.1415926;
    int i7 = pi;
    //int i8{ pi };                     //當初始值存在丟失信息時,使用列表初始化會報錯!

    //在函數體內部的內置類型變量不被默認初始化,其變量值是未定義的;在函數體之外的變量被初始化為0。所以,顯示初始化變量是非常必要的!
    //每個類決定其初始化對象方式,例如string默認初始化為空串。由類的默認構造函數決定!

    //變量的命名規范:標識符要體現實際含義;變量名一般用小寫字母;用戶自定義的類名用大寫字母開頭;如果標識符由多個單詞組成,則單詞間應有明顯區分。

    int ival = 1024;
    int &refVal = ival;             //引用,即對象別名,程序將引用和它的初始值綁定。引用必須被初始化!
    int *pVal = &ival;              //指針,指針本身就是一種對象。但是也建議進行空指針初始化!
    cout << refVal << " " << *pVal << endl;

    //空指針,注意不能把int變量直接賦給指針。
    int *p1 = nullptr;//c++推薦方式!
    int *p2 = 0;
    int *p3 = NULL;

    //void*指針
    void *p4;
    //int *p5 = static_cast<int*>(p4);//強制類型轉換。

    //指向指針的指針
    int ival2 = 1024;
    int *p_ival2 = &ival2;
    int **pp_ival2 = &p_ival2;
    cout << ival2 << "-" << *p_ival2 << "-" << **pp_ival2 << endl;

    //指針是對象,所以有引用
    int ival3 = 1024;
    int *pi_ival3 = &ival3;
    int *&r_p_ival3 = pi_ival3;

    //const限定符,指向常量的引用
    const int ival3 = 1314;             //cosnt對象創建時必須初始化!
    const int ival4 = ival2;            //利用一個對象去初始化const對象。
    //extern const int ival5 = 1024;        //如果想在多個文件之間共享const對象,必須在對象定義時加上extern。
    const int &r_ival3 = ival3;         //cosnt常量引用,引用ival3對象。常量引用綁定非常量對象、字面值;非常量引用不允許綁定常量對象。

    //指向常量的指針
    const int *p_ival3 = &ival3;        //類似于指向常量的引用。
    //常量指針,即指針對象地址不能修改。
    int *const pp_ival3 = &ival3;       //指針將一直指向ival3.
    //指向常量的常量指針
    const int *const ppp_ival3 = &ival3;

    //頂層const和底層const
    //頂層const表示(指針)本身是個常量;底層const表示指針所指的對象是一個常量。
    //const(底層) int *const(頂層) pp_ival3 = &ival3;

    //常量表達式:值不會改變并且在編譯過程就能得到計算結果。
    const int ival6 = ival3 + 520;
    //將變量聲明為constexpr,便由編譯器來驗證變量是否是一個常量表達式。
    constexpr int ival7 = 520;      //如果確定變量為常量,則就把它聲明為constexpr。
    //算術類型、應用和指針都是字面值類型,可以被定義為constexpr;而自定義類型string則不能!
    constexpr int *q = nullptr;     //如果constexpr定義指針,將所定義的對象置為頂層const。

    //類型別名
    typedef double wages;       //wages是double的同義詞,p是double*的同義詞。
    using uwages = wages;       //C++新的規定,別名聲明
    typedef wages *p;

    //auto類型說明符,通過初始值來推算變量的類型
    auto ai = 1;
    //auto一般會忽略掉頂層const,如果希望推斷頂層const,則需要明確指出
    const auto cai = 2;
    //還可以將引用的類型設為auto,此時頂層常量屬性仍然保留
    auto &rai = ai;

    //decltype類型指示符,返回操作數的數據類型,包括頂層const和引用在內。即推斷指針為引用,推斷函數為函數類型!
    decltype(ai) dai = 2;
    //特別用法
    int di = 1, *dpi = &di, &dr = di;
    decltype(dr + 0) b;     //返回類型為int
    decltype(*dpi) dc = dr; //返回類型為int&
    decltype((di)) drr = dr;//雙括號的結果永遠是引用

    //自定義數據結構
    class Sales_data
    {
        string bookNo;
        unsigned units_sold = 0;            //類內初始值,推薦使用值初始化。
        double revenue = 0.0;
    };

    Sales_data data1, data2;                //類通常被定義在頭文件中,而類所在頭文件的名字應與類的名字一樣。

    //頭文件保護符,避免頭文件被多次包含,從而導致重復定義
    //  #ifndef SALES_DATA_H
    //  #define SALES_DATA_H
    //  #include<string>
    //  /*聲明和定義*/
    //  #endif

    cin.ignore();

    return 0;
}

//C++定義了算術類型和空類型,其中算術類型包括字符、整數、布爾值、浮點數。
//帶符號包含正數、負數、零;不帶符號包含大于等于0的值。不帶符號聲明:unsigned int i=1。
//signed char表示-128~127,unsigned char表示0~255,不要聲明char。
//當明確知曉數值不可能為負時,選用無符號類型;如果你的數值超出int范圍,選用long long;在算術表達式中不要使用char和bool,只有存放字符和布爾值時才使用它;執行浮點運算選用double。
//內置類型轉換:0為false,否則為true;false為0,true為1;浮點數到整數,僅保留整數部分;整數轉浮點型,小數部分為0,如果整數所占空間超過浮點型容量,否則精度有可能損失;給帶符號類型超范圍值,結果是未定義的;

第二章介紹了C++基本的數據類型(算術型+引用+指針)及其用法,另外也講解了C++對于復合類型的支持(類),

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,182評論 6 543
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,489評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,290評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,776評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,510評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,866評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,860評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,036評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,585評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,331評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,536評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,058評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,754評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,154評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,469評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,273評論 3 399
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,505評論 2 379

推薦閱讀更多精彩內容