▲ | TuxSH 5 days ago | |||||||
> It really isn't. There's a lot of little nuanced differences that can bite you. These are mostly inconsequential when using code other people write. It is trivial to mix C and C++ object files, and where the differences (in headers) do matter, they can be ifdefed away. > void * implicit casting in C just works, but in C++ it must be an explicit cast (which is kind of funny considering all the confusing implicit behavior in C++). This makes sense because void* -> T* is a downcast. I find the C behavior worse. > enums and conversion between integers is very strict in C++. As it should, but unscoped enums are promoted to integers the same way they are in C > `char * message = "Hello"` is valid C but not C++ Code smell anyway, you can and should use char[] in both languages You didn't mention the difference in inline semantics which IMO has more impact than what you cited | ||||||||
▲ | account42 4 days ago | parent | next [-] | |||||||
> you can and should use char[] in both languages Not for temporaries initialized from a string constant. That would create a new array on the stack which is rarely what you want. And for globals this would preclude the the data backing your string from being shared with other instances of the same string (suffix) unless you use non-standard compiler options, which is again undesirable. In modern C++ you probably want to convert to a string_view asap (ideally using the sv literal suffix) but that has problems with C interoperability. | ||||||||
| ||||||||
▲ | butterisgood 4 days ago | parent | prev [-] | |||||||
I was not trying to be exhaustive. And I think you're downplaying many of the ones I mentioned, but I think this level of "importance" is subjective to the task at hand and one's level of frustrations. |