20190505讀書筆記

2021-09-21 01:21:04 字數 1310 閱讀 5118

建構函式初始化列表

cmdhandler::cmdhandler()

: m_psocksend(zsock_new(zmq_pair))

, m_psockrecv(zsock_new(zmq_pair))

建構函式列表初始化執行順序與成員變數在類中宣告順序相同,與初始化列表中語句書寫先後無關。

2. 當結構體或類的本身或其基類中存在虛函式時,也需要謹慎使用memset。

class baseparameters

};class myparameters : public baseparameters

;myparameters my_pars;

memset(&my_pars, 0, sizeof(my_pars));

baseparameters* pars = &my_pars;

myparameters* my = dynamic_cast(pars);

程式執行到dynamic_cast時發生異常。原因其實也很容易發現,我們的目的是為了初始化資料結構myparameters裡的data和buf,正常來說需要初始化的記憶體空間是sizeof(int) * 3 * 2 = 24位元組,但是使用memset直接初始化myparameters型別的資料結構時,sizeof(my_pars)卻是28位元組,因為為了實現多型機制,c++對有虛函式的物件會包含乙個指向虛函式表(v-table)的指標,當使用memset時,會把該虛函式表的指標也初始化為0,而dynamic_cast也使用rtti技術,執行時會使用到v-table,可此時由於與v-table的鏈結已經被破壞,導致程式發生異常。

3. sprintf的用法

函式功能:把格式化的資料寫入某個字串

函式原型:int sprintf( char buffer, const char format [, argument] … );

返回值:字串長度(strlen)

例子:char who = 「i」;

char whom = 「csdn」;

sprintf(s, 「%s love %s.」, who, whom); //產生:「i love csdn. " 這字串寫到s中

sprintf(s, 「%10.3f」, 3.1415626); //產生:」 3.142"

4. fprintf的用法

用於對流或檔案進行操作。

5. fflush的用法

fflush是乙個計算機函式,功能是沖洗流中的資訊,該函式通常用於處理磁碟檔案。fflush()會強迫將緩衝區內的資料寫回引數stream 指定的檔案中。

mysql運維 讀書筆記 Mysql 讀書筆記

mysql儲存時間有兩種型別 datetime和timestamp。分別說一下兩者的區別。datetime,以8位元組儲存時間,理論上可以從0000年儲存到9999年。並且沒有時區的概念,它儲存的就是乙個時間點的概念。timestamp和datetime最主要的不同就是,它是以4個位元組儲存,由19...

struts in action讀書筆記

struts in action 學習筆記 一 struts的控制流 因為web 應用是動態的,所以很難表現 乙個真正固定的控制流 取決於環境,不同的方式下有很多不同的事情發生 特別是在web 應用中。但是事情仍然有乙個通用的秩序。如果你是個struts,應用框架,甚至web 應用的新手,這些流程剛...

中 斷(讀書筆記)

裝置的中斷會打斷核心中程序的正常排程和執行,系統對更高吞吐率的追求勢必要求中斷服務程式盡可能地短小精悍。但是這個良好的願望往往與現實並不吻合。在大多數的系統中,當中斷到來時,要完成的工作往往並不是短小的,它可能要求進行較大量的耗時處理。為了在中斷執行時間盡可能短和中斷處理需要完成大量工作之前找乙個平...