Почему я могу неявно преобразовать литерал int в int * в C, но не в C++?

Я полагал, что в следующем коде C "автоматически приводит 17 к int *", что, как кто-то недавно указал (но не объяснил почему), неверно.

int *ptoi = 17; // I assumed that 17 is being automatically casted to int *

Я знаю, что если я сделаю то же самое, что описано выше, в C++, то получу ошибку invalid conversion from int to int *. Но если я сделаю следующее в C++, то все работает нормально:

int *ptoi = (int *)17;

По этим причинам я думал, что в C приведение было неявным.

Может кто-нибудь объяснить, почему в C++ я должен приводить, а в C все работает нормально?

25
задан hugomg 27 November 2011 в 19:57
поделиться