Я не могу найти ответ в стандартной документации. Требует ли стандарт языка C++, чтобы sizeof(bool)
всегда был 1 (для 1 байта), или этот размер определяется реализацией?
Определяется ли sizeof (bool) в стандарте языка C++?
Ответ 1
sizeof(bool)
определяется реализацией, и стандарт подчеркивает этот факт.
§5.3.3/1, сокращенно:
sizeof(char)
,sizeof(signed char)
соsizeof(unsigned char)
sizeof(signed char)
иsizeof(unsigned char)
равны 1; результатsizeof
примененного к любому другому фундаментальному типу, определяется реализацией. [Примечание: в частности,sizeof(bool)
иsizeof(wchar_t)
определяются реализацией. 69) ]
Сноска 69):
sizeof(bool)
не обязательно должен быть 1.
Ответ 2
http://msdn.microsoft.com/en-us/library/tf4dy80a.aspx
"В Visual С++ 4.2 файлы заголовков Standard С++ содержали typedef, который приравнивал bool к int. В Visual С++ 5.0 и более поздних версиях bool реализован как встроенный тип размером 1 байт. что для Visual С++ 4.2 вызов sizeof (bool) дает 4, тогда как в Visual С++ 5.0 и более поздних версиях один и тот же вызов дает 1. Это может вызвать проблемы с повреждением памяти, если вы определили элементы структуры типа bool в Visual С++ 4.2 и являются микширование объектных файлов (OBJ) и/или DLL, построенных с помощью компиляторов 4.2 и 5.0 или более поздних версий."
Ответ 3
Определена реализация. Только sizeof(char)
по стандарту 1
.
Ответ 4
См. пункт 5.3.3 пункта 1:
[Примечание: в частности, sizeof (bool) и sizeof (wchar_t) являются определенная реализация .69)]