Определен ли sizeof(bool)?


Я не могу найти ответ в нормативной документации. Это sizeof(bool) всегда 1 байт, или это определенная реализация?

4 94

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 или более поздних версий."

это реализация определена. Только sizeof(char) и 1 стандартные.

см. 5.3.3 пункта 1 :

[Примечание: в частности, sizeof (bool) и sizeof (wchar_t) являются реализация-определено.69) ]