sizeof可以對函數調用求值,結果為函數返回值類型的大小,函數并不會被調用,因為sizeof只是提取算子的數據類型,并不會執行算子。
我們來看一個完整的例子:
char foo(){
特別地,如果函數返回值為void,則sizeof的值為sizeof(void)== 1,注意不是0;
ISO C++標準規定,函數、以及位域(bit-field)成員不能被計算sizeof值,即下面這些寫法都是錯誤的:
int foo2(){}sizeof(foo2);//errorstruct S{unsigned int f1:1;unsigned int f2:5;unsigned int f3:12;};sizeof(S::f1);//error
2.字符串的sizeof比strlen大1.因為sizeof計算的是變量才內存中占用的字節數,而字符串中的/0字符也是要占用1個字節的;但是strlen函數計算的是字符串的實際長度,直到遇到/0.
char s[] = "this is a test";cout << sizeof(s) << endl;//15cout << strlen(s) << endl;//14
3.sizeof計算時不涉及對內存空間的訪問,僅僅提取算子的數據類型。
string a = "test";cout << sizeof(a.at(1 << 100000)) << endl;
假設sizeof訪問了內存,由于1 << 100000超出了a的范圍,at函數理應拋出out_of_range異常,但現在程序完美運行,故假設不成立.
新聞熱點
疑難解答