2016-03-01 4 views
-1

Я думал, что размер std::bitset<0> myBS будет 0, а std::cout << sizeof(myBS) распечатать 1. Может ли кто-нибудь объяснить мне это? Означает ли это, что битбит никогда не может быть нулевым?C++ - размер std :: bitset <0>?

+2

Это означает, что объект C++ никогда не может быть меньше 1 байт. Стандарт гарантирует это. –

+0

'sizeof' никогда не может дать 0 в стандартном C++ –

+0

« может быть null »является опасным термином в C++. В таких языках, как SQL и Java, объекты могут быть NULL. В C++ это не так. _Pointers_ может быть нулевым, и это все. Целые числа могут быть равны нулю, а строки могут быть пустыми, но ни один из них не равен «null». – MSalters

ответ

3

sizeof не может вернуть ноль в C++. Размер объекта как минимум один (за исключением пустых базовых классов). Если бы это было не так, тогда у вас мог бы быть массив объектов, где все объекты будут храниться по одному и тому же адресу.

Значение sizeof(std::bitset<N>) на самом деле не имеет отношения к делу. Класс std::bitset<N> предоставляет интерфейс последовательности N бит. Если N = 0, стандарт гарантирует, что этот интерфейс равен точно 0 бит. Это верно независимо от того, насколько большой объект. Независимо от того, сколько бит находится в этом объекте, вы можете использовать только 0 из них.

+0

спасибо, 'интерфейс' - это слово, которое я искал. Я неверно истолковал количество бит элементов в битете как размер, в то время как это мощность. – scmg

Смежные вопросы