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