З очевидних відмінностей є, наприклад, автоматичне приведення в сішці void-вказівника
void* до вказівника на будь-який інший тип, наприклад, int*. А неявні касти в результаті приносять значно більше болю, ніж необхідність робити це явно. В Haskell немає неявних приведень типу, і жоден розробник з десяти у світі від цього не вмер.Але у зворотному боці я також отримав декілька WTF-моментів. Наприклад, в C++ можна написати
int i = 0;
(i = 10) = 42;
і воно це схаває, бо в C++
operator= повертає lvalue, але в C — ні, тож там це не спрацює. Це ж буквально один з пунктів, на які я жалівся у статті. Неприємно здивований.Це з цікавого. Кажуть: «Майже будь-який код на C може бути скомпільований як C++» — проте не кажуть, що це ще не гарантує його коректність. Наприклад, в C
sizeof('a') повертає розмір int, а в C++ — розмір char 🥱Короч, між C та C++ ще безліч «прикольних» відмінностей. Аж на цілу пдф-ку назбиралося.