C++ Primer 3rd 英文版 閱讀筆記+練習代碼

來源:互聯網
上載者:User
chapter 1:

1、目前對ISO98標準的C++支援的較好的編譯器有gcc和VC7.1(Visual Studio .NET 2003)

2、由於各平台和編譯器的不同實現,導致了C++標頭檔的副檔名(suffix)不統一,所以目前的C++標準中,標頭檔不帶任何尾碼,如#include <iostream>,不再是#include <iostream.h>等類似的寫法

3、目前的C++標準,要調用任何庫,必須使用namespace,如using namespace std就是使用C++的標準庫,不帶namespace的任何庫調用(包括第三方的庫),編譯器將報告不認識庫函數的錯誤

4、C++標準中預定義了兩個名稱,__LINE__和__FILE__,分別代表原始碼的行號和檔案名稱,可以在代碼中直接引用

5、在做輸出的時候,我們可以使用endl來代替"\n",因為endl除了在行插入入一個分行符號(newline)之外,還能flush output buffer

Chapter2

1、int *pint = new int(1024); //new一個int類型的object,並賦初值1024

2、int *pia = new int[4]; //new一個int類型的數組,包含四個元素,pia是數組第一個元素的地址

3、new出來的對象必須用delete銷毀,沒有用new出來的object,系統會自動銷毀和回收。delete一個object,用delete pint , delete一個數組,用delete [] pia

4、有關namespace。第一種用法,<namespace>:: ,如std::cout;第二種用法,using namespace std; ,這樣,後續代碼中所有的庫調用都會被編譯器假設是std下面的庫;第三種用法,namespace LIB = Disney_Feature_Animation; 然後用LIB::<方法名>可以調用,相當於給一個長的,不好記的namespace賦一個容易記憶的別名。更詳細的看專門講 namespace的一章

5、C++中有數組,但是在標準庫中提供了vector作為一個更好的數組替代品。如:

vector<int> ivec( 10 ); //一個有十個int object的vector
vector<string> svec( 10 ); //一個有十個string object的vector

還有更多的用法:

// ways of creating a vector object
vector<int> vec0; // empty vector

const int size = 8;
const int value = 1024;

// vector of size 8,
// each element initialized to 0
vector<int> vec1( size );

// vector of size 8,
// each element initialized to value 1024
vector<int> vec2( size, value );

// vec3 is of size 4
// initialized to the four values of ia
int ia[4] = { 0, 1, 1, 2 };
vector<int> vec3( ia, ia+4 );

// vec4 is a copy of vec2
vector<int> vec4( vec2 );

附件代碼中有一個例子是如何使用vector的(包括如何遍曆vector)

Chapter3 C++ Data types

第一節 Literal Constant
1、char, short, int, long 都是數字型的類型。他們都有signed和unsigned兩種類型。signed類型,就是最高位的bit代表sign bit,unsigned類型,就是所有位都用來表示數字。所以,signed類型的表示範圍是-128-127,unsigned類型的表示範圍是0- 255
2、表示數的方法有十進位、八進位和十六進位三種。八進位就是在數的前面加0,十六進位就是在數的前面加0x
3、integer預設情況下被認為是signed,如果要聲明一個unsigned的常量integer,可以在數的後面加上U/u(大小寫無 所謂,推薦用大寫)。同理,如果要把一個常量integer表示為一個long類型,可以在後面加L/l(大小寫都可以,推薦用大寫)。如128U 1024UL 1L 8Lu
4、浮點數,如3.14159。預設情況下,常量浮點數將被認為是double類型,如果要將其定義為單精確度的Float類型,可以在常量後面加F/f(大小寫都可以,推薦用大寫),如3.14159F,當然,如果用科學技術法表示的浮點數是不可以這樣的。
5、字元-char。常量字元的表示使用單引號,如'a'。另外,有一些逸出字元,如'\n' '\t'等,字元還可以使用八進位來表示(說明了字元也是一種數字類型),如\7(bell) \14(newline) \0(null) \062('2')。在常量字元前,加上一個L(大寫),表示這是一個寬字元(wide-character),對應的類型就是wchar_t,寬字元可 以用來表示中文。
6、字串。字串是用雙引號包括起來的一些字元。一行表示不下的字串,可以在行末使用一個back-slash來延續。常量字串前,也可以使用L來表示一個由wide-char組成的寬字元串,如L"Hello",注意,寬字元串的結尾符號\0也是一個寬字元。
7、字元和字串的區別。字元的結尾沒有\0,字串的結尾有一個\0的字元。所以,對於compiler來說,'A'和"A"是不一樣的。
8、兩個字串相鄰的時候,compiler會自動將兩個字串做串連(concatenate),然後在末尾的地方加上一個\0。 如"two""some" 將會被表示成twosome,但是,注意,一個字串和一個寬字元串是不能被串連的,如"two"L"some",這樣是不可以的。

第二節 Variable
1、變數和文本常量、常量(以const修飾的變數)不同的是,變數有read value和location value兩個屬性,而後兩者一般都只有read value(指我們一般不能對他們的location value做操作)。

第三節 Pointer Types
1、指標變數定義的時候,強烈要求將*寫到變數的前面,而不是緊跟在類型的後面。如string *ps,而不是寫成string* ps。之所以要這樣,是為了在同時定義多個指標時發生誤解。如string* ps, ps2; 這個其實是定義了一個ps指標和一個ps2的string變數,如果這樣寫,很容易讓人誤解為ps和ps2都是指標,所以,我們要求改成這樣: string *ps, ps2; 這樣就比較清晰,不容易產生誤解。
2、int *pi = 0; 將指標置為null(null就是0)
3、指向不同類型的指標不能相互賦值。如:
double dval; double *pd = &dval;
int ipi; int *pi = &ipi;
pi = pd; //出錯!
這裡出錯不是因為指標本身的值不能互相賦(從本質上來說,不管是什麼指標,其本身的值都只佔用4個byte的空間,在32位系統下,所以,互相賦值根本沒 問題),而是因為pi和pd指向的變數類型不同,所以,編譯器在解釋他們所指向的對象的時候,對象的大小和階層也會不一樣,所以,指向不同類型的指標 不能互相賦值。
4、void * 僅僅表示這是一個指標,但該指標所指向的變數類型為unknown。所以,void * 這種指標只能被用來賦值以及和一些指標地址做比較。
5、指標運算,pointer arithmetic。如:
int i = 9;
int *pi = &i;
pi = pi + 2;
如上,pi+2這個操作之後,pi的地址將後移兩個int的大小。也就是說,給指標做運算時,將會根據指標本身所指向對象的大小,相應的前移/後移N個對 象地址。最典型的情況是,在一個數組中,假設a是指向數組開頭地址的指標,那麼a+2之後,將指向數組第三個元素!

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.