一、什么是sizeof
首先看一下sizeof在msdn上的定義:
The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregate types). This keyword returns a value of type size_t.
看到return這個字眼,是不是想到了函數(shù)?錯了,sizeof不是一個函數(shù),你見過給一個函數(shù)傳參數(shù),而不加括號的嗎?sizeof可以,所以sizeof不是函數(shù)。網(wǎng)上有人說sizeof是一元操作符,但是我并不這么認(rèn)為,因為sizeof更像一個特殊的宏,它是在編譯階段求值的。舉個例子:
1 cout< 2 cout< 3
在編譯階段已經(jīng)被翻譯為:
1 cout<<4< 2 cout<<1< 這里有個陷阱,看下面的程序:
1 int a = 0;
2 cout< 3 cout<
輸出為什么是4,0而不是期望中的4,3???就在于sizeof在編譯階段處理的特性。由于sizeof不能被編譯成機器碼,所以sizeof作用范圍內(nèi),也就是()里面的內(nèi)容也不能被編譯,而是被替換成類型。=操作符返回左操作數(shù)的類型,所以a=3相當(dāng)于int,而代碼也被替換為:
int a = 0;
cout<<4< cout<
1 cout << sizeof("abcd") << endl;//5
"abcd"返回是字符串類型
所以,sizeof是不可能支持鏈?zhǔn)奖磉_(dá)式的,這也是和一元操作符不一樣的地方。
結(jié)論:不要把sizeof當(dāng)成函數(shù),也不要看作一元操作符,把他當(dāng)成一個特殊的編譯預(yù)處理。
二、sizeof的用法
sizeof有兩種用法:
(1)sizeof(object)或sizeof object
也就是對對象使用sizeof,也可以寫成sizeof object 的形式。例如:
(2)sizeof(typename)
也就是對類型使用sizeof,注意這種情況下寫成sizeof typename是非法的。下面舉幾個例子說明一下:
1 int i = 2;
2 cout< 結(jié)論:不論sizeof要對誰取值,都加上()。
三、基本數(shù)據(jù)類型的sizeof
(1)C++內(nèi)置數(shù)據(jù)類型
32位C++中的基本數(shù)據(jù)類型,
bool char short int(short) int long int(long) float double long double
sizeof 1 1 2 4 4 4 8 10
char,short int(short),int,long int(long),float,double, long double大小分別是:1,2,4,4,4,8, 10。
首先看一下sizeof在msdn上的定義:
The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregate types). This keyword returns a value of type size_t.
看到return這個字眼,是不是想到了函數(shù)?錯了,sizeof不是一個函數(shù),你見過給一個函數(shù)傳參數(shù),而不加括號的嗎?sizeof可以,所以sizeof不是函數(shù)。網(wǎng)上有人說sizeof是一元操作符,但是我并不這么認(rèn)為,因為sizeof更像一個特殊的宏,它是在編譯階段求值的。舉個例子:
1 cout<
在編譯階段已經(jīng)被翻譯為:
1 cout<<4<
1 int a = 0;
2 cout<
輸出為什么是4,0而不是期望中的4,3???就在于sizeof在編譯階段處理的特性。由于sizeof不能被編譯成機器碼,所以sizeof作用范圍內(nèi),也就是()里面的內(nèi)容也不能被編譯,而是被替換成類型。=操作符返回左操作數(shù)的類型,所以a=3相當(dāng)于int,而代碼也被替換為:
int a = 0;
cout<<4<
1 cout << sizeof("abcd") << endl;//5
"abcd"返回是字符串類型
所以,sizeof是不可能支持鏈?zhǔn)奖磉_(dá)式的,這也是和一元操作符不一樣的地方。
結(jié)論:不要把sizeof當(dāng)成函數(shù),也不要看作一元操作符,把他當(dāng)成一個特殊的編譯預(yù)處理。
二、sizeof的用法
sizeof有兩種用法:
(1)sizeof(object)或sizeof object
也就是對對象使用sizeof,也可以寫成sizeof object 的形式。例如:
(2)sizeof(typename)
也就是對類型使用sizeof,注意這種情況下寫成sizeof typename是非法的。下面舉幾個例子說明一下:
1 int i = 2;
2 cout<
三、基本數(shù)據(jù)類型的sizeof
(1)C++內(nèi)置數(shù)據(jù)類型
32位C++中的基本數(shù)據(jù)類型,
bool char short int(short) int long int(long) float double long double
sizeof 1 1 2 4 4 4 8 10
char,short int(short),int,long int(long),float,double, long double大小分別是:1,2,4,4,4,8, 10。