Interesting discussion. I can honestly say that I have never seen any of these come up.
In case anyone is worried, the sizeof('i') one looks, at first glance, like the most worrying one.
However, it is less serious than it might look. Given "char c;", sizeof(c) evaluates to 1 in both languages, it is just a single character constant like 'i' which causes a possible problem.
For anyone curious why, I'm not sure why character constants are int in C, but in pure C I think it is impossible to tell that a character literal is an int (as there is no function overloading, or type deductions).
In C++ however, with function overloading, we can tell. In particular, we really want:
std::cout << 1 << 'i' << std::endl;
To print the number 1, followed by the letter i. Therefore we need the letter i to be of type char, rather than another int.
That answer feels like a cheat to me - aren't both sizeofs implementation defined, so it would be possible (although arguably silly) to have an implementation where char and int were the same size?
It's nice to see a HN submission of an on-topic stackoverflow question (instead of all the off-topic ones that get submitted, followed by comments complaining about the question being closed on SO.)
[+] [-] CJefferson|13 years ago|reply
In case anyone is worried, the sizeof('i') one looks, at first glance, like the most worrying one.
However, it is less serious than it might look. Given "char c;", sizeof(c) evaluates to 1 in both languages, it is just a single character constant like 'i' which causes a possible problem.
For anyone curious why, I'm not sure why character constants are int in C, but in pure C I think it is impossible to tell that a character literal is an int (as there is no function overloading, or type deductions).
In C++ however, with function overloading, we can tell. In particular, we really want:
std::cout << 1 << 'i' << std::endl;
To print the number 1, followed by the letter i. Therefore we need the letter i to be of type char, rather than another int.
(Fixed last 'C' to 'C++' : Thanks dbaupp)
[+] [-] lmm|13 years ago|reply
[+] [-] dbaupp|13 years ago|reply
[+] [-] finnw|13 years ago|reply
[+] [-] sturmeh|13 years ago|reply
[+] [-] unknown|13 years ago|reply
[deleted]