2013年12月15日 星期日

c character literal is different from c++

1st edition: 20130117 08:03:00
2nd edition: 20131215 21:39:50
a.c
1 #include <stdio.h>
2 int main(int argc, const char *argv[])
3 {
4   printf("sizeof('a'): %d\n", sizeof('a'));
5   return 0;
6 }

真令人驚訝:
'a' type is int in c;
sizeof('a'): 4

'a' type is char in c++;
sizeof('a'): 1

這篇提到的問題:  http://www.ptt.cc/bbs/C_and_CPP/M.1357715450.A.04C.html 在 Expert C Programming 上看到彼此的不同。

永遠有難倒人的題目。小心走火入魔變成王語嫣。

這可能有不少人知道, 但為什麼 c++ 要做如此的改動呢?
原因出在 iostream library:

cout << 'X'; 會得到 88 (X ascii code), 因為
operator<<(int)
operator<<(char)
這兩個無法符合 overloaded 規則, 這是被當作是相同的參數函式, 在將 'X' 當作 char 而不是 int 後, cout 才能正常印出 char。

ref: The Design and Evolution of C++ 11.2 section

沒有留言:

張貼留言

使用 google 的 reCAPTCHA 驗證碼, 總算可以輕鬆留言了。

我實在受不了 spam 了, 又不想讓大家的眼睛花掉, 只好放棄匿名留言。這是沒辦法中的辦法了。留言的朋友需要有 google 帳號。