размер типа данных без использования sizeof - PullRequest
19 голосов
/ 02 августа 2009

У меня есть тип данных, скажем X, и я хочу узнать его размер без объявления переменной или указателя этого типа и, конечно, без использования оператора sizeof.

Возможно ли это? Я думал об использовании стандартных заголовочных файлов, которые содержат размер и диапазон типов данных, но не работают с пользовательским типом данных.

Ответы [ 21 ]

0 голосов
/ 17 июня 2011

При этом учитывается, что байт C ++ не всегда представляет собой 8 двоичных битов и что только неподписанные типы имеют хорошо определенное поведение переполнения.

#include <iostream>
int main () {
    unsigned int i = 1;
    unsigned int int_bits = 0;
    while (i!=0) {
        i <<= 1;
        ++int_bits;
    }

    unsigned char uc = 1;
    unsigned int char_bits = 0;
    while (uc!=0) {
        uc <<= 1;
        ++char_bits;
    }

    std::cout << "Type int has " << int_bits << "bits.\n";
    std::cout << "This would be  " << int_bits/8 << " IT bytes and "
              << int_bits/char_bits << " C++ bytes on your platform.\n";
    std::cout << "Anyways, not all bits might be usable by you. Hah.\n";
}

Конечно, вы также можете просто #include <limit> или <climits>.

...