C++学习笔记系列一
生活随笔
收集整理的這篇文章主要介紹了
C++学习笔记系列一
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、<< ?在c語言里面是左移,在c++里面是一個函數,利用函數重載。例如,
? ? ? cout就是一個對象。故它可以調用 << 這個函數。
引用作為函數的返回值。首先要保證綁定引用的變量的生命周期一定要大于函數的。例如:在函數棧里面的一個局部變量被引用返回時,局部變量就會被銷毀。故注意 不要返回一個局部變量。? ??
2、 ?返回一個堆空間的一個引用,return ?// ?若引用發生偏移,則會
發生內存泄露,所以,不要將已返回一個堆空間變量的引用的,
除非已經做好了內存回收的策略的。
6、類型強制轉換
- 定義在名稱空間中的變量或者函數都稱為實體
- ?:: ?是作用域限定符 ( std:: cout <<"hello , world ")
- 在命名空間之后,可以加上提示語句,//end of namespace A;
- 對于命名空間,除了::,外還可以使用using ?命名機制,盡可能將其范圍縮小。
- using 編譯指令,(using namespace std ; 實體全部引進)建議不要使用,但可以用using申明機制(using std:: out;) ?(推薦使用)
- 對于全局變量,是位于匿名的命名空間,可以用直接加上雙冒號 ?<< ?: ?: ?num; ? 就可以了,
- 對于C頭文件里面的所用實體都認為是放在匿名的命名空間里面的
- 可以把命名空間看成一個容器,
- 名稱空間中函數的定義和實現可以分開進行
- 函數原型可以多次聲明
- 匿名的命名空間 ? eg: ?( : :memcpy )
- 常量的值是不能被修改的。
- const 常量必須要初始化
- 預處理僅僅是一個打開頭文件,進行一個字符串替換,它是不涉及類型檢查的。有可能將錯誤發生的時機延后到運行時,但,如果使用const關鍵字,它發生的時機是編譯時,是具有類型檢查的功能。可以盡量使用const關鍵字,替換宏定義。const常量必須進行初始化。
- 對于const常量指針,當用const修飾指針時,(const在* 左邊時,eg: ?const int * pb),我們是不可以使用指針解引用改變該指針指向內容的值,但是可以修改該指針的指向的。相當于左邊加上const后,是保護指針指向的內容的額,叫常量指針。 ? (經常用)
- 對于const 如果在* 的右邊,是如 int ?* ?const p;時,此時我們可以改變它指向內容的,但是不可以修改它的指向的,相當于,定義了一個p 的指針常量。(經常用),如果不清楚,可以參見prime,以C++ prime為準。從右邊向左閱讀。
- 類似的概念還有,指針數組 (eg: int * p[10])和 數組指針int (*p)[10],指針函數( int *p( ) )返回指針的函數和函數指針int (*p)() ?。
- c++的申請堆空間,( ?eg: int* p= new int(1) ?),可使用delete 釋放空間。首先new/ delete是表達式,其次開辟空間時,是可以進行初始化的,成對使用。申請10個對象時,int *p=new int [10] ( ) ?,它是可以識別類型的。這樣可以把數組初始化為0,,釋放時,delete ?[ ?] p;都需要加上中括號。
- 對于c語言的malloc ?/ free 是c的標準庫函數,開辟空間時,是不能初始化的,但可以賦值,給指向,也是必須的。不然就是野指針。成對使用。
- 引用是一個變量的別名,有一點和指針很像,因為引用要綁定在一個變量上去的,故必須進行初始化,綁定,一旦綁定就不會再改變指向。(eg: ?int ?& ref =a)類似于一個指針常量,不能改變指向。
- 操作引用的時候,就是操作變量本身。經典例子,Swap交換函數,法一,傳地址,交換值,法二,傳引用,,
- 非const左值引用不能綁定到右值--->只有const左值引用才能綁定到右值,eg: const ?int & ref =10;-->可以。int & ref =10;不行,左值是左邊可以加運算符的eg: ?&a,,
- swap(int ?& refa,int ?&refb)-------swap(a,b) ?在參數傳遞時,可以節省復制的開銷,不用另外開辟空間,提高程序的執行效率,使用更直觀。
- 指針是一個獨立的實體,而引用是一個別名
- 指針是不需要進行初始化,但引用必須要進行初始化。
- 指針是可以改變指向的,引用不能。
- 指針可以指向NULL,但引用不能。
- 引用作為函數的參數,操作的就是實參本身。
- c語言中,例如,double ?b; ? int ?a=(int ) b;
- c++中強制轉換的運算符,關鍵字,,
- int ?a,= static_cast<int>(b);
- 還有const_cast ?/ dynamic_cast ?/ ?reinterpret_cast(暴力轉換)
- c++支持函數重載,其實現的原理當函數名稱相同時,是名字改編那么( name mangling),其步驟是,當函數名稱相同時,會根據函數的參數的類型,個數,以及順序的不同進行改編。可先生成 .o文件,再用nm命令查看 ?.o 文件。
- 當我們需要函數名以c語言的方式去調用,名字不進行名字改編可以采用關鍵字 ? extern ?"C"{ ? 里面為語句? }? ? ??//end of extern "C" ?,這樣就不會進行名字改編。 ?這樣就可以使用C 的方式。
- c語言在處理字符串時,需要考慮空間大小,避免越界。
- C++的字符串處理就比較方便,#include<string> ?也在std的命名空間里面。std::string s1="hello"; std::string s2(",world");
- 遍歷字符串的內容,string類也可以直接訪問, s.size() ?或s.length ( ) ?字符串長度。其中也可以直接用下標訪問法去訪問。
- 截取字符串 ?s. substr(初始位置,截幾個) ?返回值即為截取的字符串。默認情況下是從0 開始的,
- 將C++風格的字符串轉換成c風格的字符串,,,const char *p= s.c_str( ) ;常用 ?或者 ?S.data( )方法也可以完成這樣的工作。
- “hello” ?的類型就是const ?char ?* 的類型。故這就是反轉換成C++的string ?的類。(常用 ) ? ?
總結
以上是生活随笔為你收集整理的C++学习笔记系列一的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python3中argparse模块
- 下一篇: python 计算机基础