C++個人未解決筆記或未熟悉的使用

1、_Pragma()。因爲能力有限,目前寫的庫都是邏輯庫和遵循C++風格,較少使用宏定義的高級用法,待續。

2、除0錯誤,不叫異常。

原理:

此異常非彼異常。
除0在Linux下收到的是SIGFPE信號,而非C++的exception。
收到SIGFPE,如樓上所說,進程直接被kill了。
在C++中,除零 是錯誤,而非 異常
在操作系統層面,除零 一般是異常
操作系統的異常 和 C++的異常 是無任何關係的兩個不同概念

3、可變參數的使用:

1)

#ifndef LOG
#define LOG(...) {\
std::fprintf(stderr,"%s :\n",__FILE__);\
std::fprintf(stderr,"Line %d:\n",__LINE__);\
std::fprintf(stderr,__VA_ARGS__);\
std::fprintf(stderr,"\n");\
}
#endif


__VA_ARGS__只能適用於宏定義中

2)

va_start(args, i);//i爲前一個參數,因爲是在內存中不規範地進行讀棧,所以需要一個哨兵,時開始節點,args指向i之後的一個地址

void foo(int i,...)
{
	va_list args;
	std::string temp;
	va_start(args, i);
	temp = va_arg(args, std::string);
	LOG("i= %d,string = %s", i, temp.c_str());
	va_end(args);
	
}
foo(12345, std::string("you are a stupid guy!!"));//對稱操作,以string

傳值,則以string解析,和socket原理類似,發生在單機程序內部

4、noexcpt(bool) 默認爲true,以後寫庫要加上相關的說明,有利於別人正確的處理程序

5、static_assert 用於預編譯情況使用

6、sizeof(Class::data)支持

7、final/override 已熟悉

8、匿名變量類型初始化模板,以及模板的默認參數需要重新看,變長模板---------------------------------重點,用起來

9、繼承構造函數和委派構造函數已在項目實用,目前沒遇到問題

10、左右值,以及轉化規則需要重複看和使用。移動語義已經移動構造函數。 ----------------------重點

11、初始化列表比較熟悉,要小心類型收窄的編譯錯誤

12、POD---------------------------------------------------------重點,看了忘了,要用,結合default 、delete屬性使用

13、>>正確識別,主要是編譯器問題。 gnu -std=c++11 即可啓用C++11,VS2012以上已支持新詞法。

14、auto decltype關於引用的推導要重複看-----------------------------------------重點

15、枚舉和強枚舉、聯合體,熟悉使用

16、auto_ptr被放棄,代替方案:shared_ptr/weak_ptr/unique_ptr,確認賦值操作的區別和使用方法,還行。

17、編譯時常量的使用------不是很熟,需要看書

18、線程類和原子類型一開始使用,線程的存儲問題----------------------重點

19、lambda語法,已經開始使用很久了。---------重點之一,要小心傳參和stl庫之間的細節







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章