Ну, во первых не “bool
и int
”, а “bool
и unsigned int
”. А во-вторых, не взаимозаменяемы, а предъявляют одинаковые требования на представление объекта, представление значения и выравнивание.
Вы точно bool
с BOOL
не перепутали?
может иметь любое значение, которое приспичит разработчикам реализации (точно также, как и sizeof
любого фундаментального типа, кроме “узкого” char
, который всегда равен 1).
Кстати, когда я говорю “любого фундаментального типа”, я имею в виду именно “любого”. Хотя с типом void
возникает коллизия. С одной стороны, он incomplete, а, значит, sizeof
к нему неприменим, но, с другой стороны, он фундаментальный тип, а sizeof
применим ко всем фундаментальным типам. В реализациях обычно позволяют применять к нему sizeof
, но иногда делают предупреждение о бессмысленности этой действа.