1. c++為什麼不建議在.h檔案中使用using namespace std;
namespace 的引入是為了解決名字衝突的問題,而 using namespace... 的引入是為了方便程式設計師,使其不用每次都輸入長長的名字。這些都跟效能無關。
通常不建議在標頭檔案中使用 using namespace *** 語句,不僅是對 std。如果標頭檔案 a.h 使用了該語句,所有直接或間接包含 a.h 的檔案都隱式使用了該語句,這會很容易導致名字衝突。
2.static作用 在
全域性變數
之前加上關鍵字static,全域性變數就被定義成為乙個全域性靜態變數。
1)記憶體中的位置:靜態儲存區(靜態儲存區在整個程式執行期間都存在)
2)初始化:未經初始化的全域性靜態變數會被程式自動初始化為0(自動物件的值是任意的,除非他被顯示初始化)
3)作用域:全域性靜態變數在宣告他的檔案之外是不可見的。準確地講從定義之處開始到檔案結尾。
注:當static用來修飾區域性變數的時候,它就改變了區域性變數的儲存位置,從原來的棧中存放改為靜態儲存區。但是區域性靜態變數在離開作用域之後,並沒有被銷毀,而是仍然駐留在記憶體當中,直到程式結束,只不過我們不能再對他進行訪問。
c語言中使用靜態函式的好處:
靜態函式會被自動分配在乙個一直使用的儲存區,直到退出應用程式例項,避免了呼叫函式時壓棧出棧,速度快很多。
不同的人編寫不同的函式時,不用擔心自己定義的函式,是否會與其它檔案中的函式同名,因為同名也沒有關係。
3.兩個關於類的建立的問題
使乙個物件可以在堆上建立,但是不能在棧上建立
class a
static void deleteinstance(a* a)
}private:
a(){}
};int main()
使乙個物件可以在棧上建立,但是不能在堆上建立
方法是通過過載new和delete操作符並且私有化,這樣就可以禁止物件在堆上分配了(因為乙個物件在堆上的建立只能通過new來實現)
class a
void operator delete(void* ptr)
public:
a(){}
}int main()
筆試面試題記錄
在intel 8086中,加減乘除那個整數運算最耗時 所有計算機中,乘除減法都是通過半加器全加器等加法來實現的,乘法左移,除法右移,但除法會多乙個分母不能為零的處理,是除法最耗時 19本書,編號從1 19。從中抽五本,任意相鄰兩本不是相鄰編號的情況有多少種。先將問題簡化成5本書取2本。可以假設2本書...
前端筆試題面試題記錄(上)
個人部落格了解一下 obkoro1.com 前端筆試題面試題記錄 下 判斷陣列和物件分別都有好幾種方法,其中用prototype.tostring.call 相容性最好。function isobjarr value else if object.prototype.tostring.call va...
面試題記錄
面試題記錄 2012年6月13日杭州某網路技術公司 1,空指標自加 int p int pa null p pa p 求p的值 這道題考的貌似指標的加法,因為對於空指標比較敏感直接感覺有問題,所以填寫出錯.到底如何呢?直接反彙編之 int p int pa null 010d14f1 mov dwo...