1、 如何查看objectfiles中定義的函數和全局變量?
好吧,其實這個問題確實與執行期語意學有關。因爲編譯器需要收集每個全局變量的構造和析構函數,而其實現方式也是使用nm命令打印object file的符號表找出特定開頭的名稱。所以咯,答案是nm命令。(騰訊面試中,我曾遇到這個,當時沒答出來T_T)
2、 operator new()、placement new()與new關鍵字有什麼不同?
這個答案如果認真讀過《STL源碼剖析》應該早就有自己的理解,這裏給我的理解,鏈接如下:
operator new()、placement new()與new關鍵字
3、 局部靜態對象是怎樣構造和使用的?
在第一個調用局部靜態對象所在的函數是構造和初始化該對象。每次調用會判斷該對象是否存在(由於object是靜態的,所以其地址會被轉換到程序內用來放置global object的data segment中),從而避免後續調用時重複構造。而析構的行爲在文中無涉及。
4、 臨時對象的生存期限是怎樣的?
1、 產生該臨時對象的完整表達式,求值過程最後一個步驟完成後被摧毀。
2、 如果一個臨時性變量被綁定於一個reference,對象將殘留,直到被初始化之reference的生命結束,或直到臨時對象的生命範圍結束——視哪一種情況先到達。
備註:臨時對象不是局部對象。