c 容易被忽視的細節序列 (一)

2021-06-19 01:06:57 字數 1290 閱讀 9069

1.std::size_t numdigits(int number)

函式返回型別被定義為std::size_t ,這表示size_t是被定義在std命名空間之內。std幾乎是所有c++標準程式庫元素的棲身之處。

另外size_t只是乙個typedef,是c++計算個數時用的不帶正負號型別(unsigned),例如char* -base 字串內的字元個數,stl容器內元素的個數。

它也是vector,deque,string內的operator[ ] 函式接受的引數型別。

2.初始化(initialization)是「給予物件賦初值」的過程。對使用者自定義型別而言,初始化由建構函式完成。所謂default建構函式是乙個可被呼叫而不帶任何實參者。這樣的建構函式要麼沒有引數,要不每個引數都有預設值。

class a{

public : a();         //default 建構函式

class b{

public : explicit b(int x=0,bool b=true);            //default 建構函式

class c{

public : explicit  c(int x);               //不是default建構函式

被宣告成explicit的建構函式通常比non-explicit兄弟更受歡迎,因為它禁止編譯器執行非預期的型別轉換。

3.default建構函式,copy建構函式,copy assignment 操作符區別

class widget{

public :

widget();                                   //default 建構函式

widget(const widget& rhs);               //copy 建構函式

widget& operator=(const widget& rhs);                     //copy assignment 操作符

widget w1;                               //呼叫default建構函式

widget w2(w1);                       //呼叫copy建構函式

w1=w2;                                 //呼叫copy assignment 操作符

widget w3 = w2;                 //呼叫copy建構函式

有新物件被定義如w3,則一定有建構函式被呼叫。而沒有新物件定義如w1=w2,就不會有建構函式被呼叫。

C reference 那些容易被忽視的細節

工作之餘做個小結。te為實體型別,td為推斷型別 引用建立時即初始化賦值。作為函式引數時,程式進入函式就已經初始化完畢。注意區分值與值的引用。一旦創造了te t右值引用便有了別名,t的行為變成左值 傳入td 模板為左引用,但t列印出的型別依然為右值引用是別名,構造好的引用可當作自身,引用之間的非初始...

容易被忽視的synchronized

public static final synchronized callmanager getinstance return minstance synchronized,多執行緒訪問同步鎖,具有以下特性 1 同一時間只允許乙個執行緒訪問 2 在乙個執行緒訪問synchronized 塊時,另乙個...

sql 容易被忽視的點

1 dual select查詢語句只有 select 就可以,但為了規範,湊結構,可以加個 dual 例 select now from dual 這個概念是oracle中的。在mysql中可寫可不寫。2 drop,delete truncate 的區別drop用於刪除資料庫,資料表的字段,刪除表 ...