#include<stdio.h>
int main()
{
printf("%d", sizeof('a'));
return 0;
}
爲什麼上面的代碼在C和C++中編譯時會產生不同的結果? 在C中,它在C++中打印4,這是更可接受的答案,即1.
當我用主函數中聲明的char變量替換sizeof()內的'a'時,兩種情況下的結果都是1!C&C++中sizeof()運算符的返回值
#include<stdio.h>
int main()
{
printf("%d", sizeof('a'));
return 0;
}
爲什麼上面的代碼在C和C++中編譯時會產生不同的結果? 在C中,它在C++中打印4,這是更可接受的答案,即1.
當我用主函數中聲明的char變量替換sizeof()內的'a'時,兩種情況下的結果都是1!C&C++中sizeof()運算符的返回值
因爲,這可能令人震驚,C和C++是不是相同的語言。
C將字符文字定義爲類型爲int
,而C++認爲它們的類型爲char
。
這是多字符常量可能是有用的一個案例:
const int foo = 'foo';
這將產生一個整數,其值將可能取決於字節順序和編譯器的心情6713199或7303014。換句話說,多字符字符文字不是「便攜式」,你不能依賴於容易預測的結果值。正如評論者指出的(謝謝!)這在C和C++中都是有效的,看起來C++使得多字符字符文字變成了另一種類型。聰明!
另外,作爲一個小問題,我想提及關於主題的時候,請注意sizeof
不是函數,size_t
的值不是int
。因此:
printf("the size of a character is %zu\n", sizeof 'a');
,或者,如果你的編譯器太老不支持C99:
printf("the size of a character is %lu\n", (unsigned long) sizeof 'a');
代表來打印你所研究的尺寸最簡單,最正確的方法。
[多字符文字在C++中也是合法的](http://stackoverflow.com/q/19394141/1009479) –
C++也有多字符文字,類型'int'和實現定義的值。 –
爲什麼我會在使用'%zu'時得到'警告:未知的格式轉換類型字符'z'? – noufal
在C中,'a'是一個字符常量,它被視爲一個整數,所以您得到的大小是4,而在C++中它被視爲一個字符。
您的例子是返回單個字符(如getch
)返回和int
,因爲這允許空間的EOF標記的情況下,C++是不兼容C.在C的API一個(-1)。所以出於這個原因,它把'c'視爲一個整數。
C++引入了操作符和函數重載,這意味着我們可能要處理
cout << 'c'
不同,以:
cout << 99
是什麼讓'1'多了一個可以接受的答案'4'? – Paddyd
@Paddyd因爲在C和C++中'sizeof(char)'都是'1'? –
@Paddyd因爲字符的大小!這種差異是我不知道的,所以1很明顯 – mac93