Как получить размер типа в C ++?

Я ищу функцию C ++, которая возвращает размер типа. Например :

#include <stdint.h>

int16_t my_var;
int32_t size_of_var;

// magical_function is what I'm looking for
// size_of_var should be equal to 16 because my_var is a int16_t
size_of_var = my_var.magical_function() ;

Я знаю, что size () существует для получения длины строки, поэтому я думаю, что есть функция, указывающая на это.

Кроме того, я работаю с библиотекой Clang, так что я могу получить тип (http://clang.llvm.org/doxygen/classclang_1_1Type.html) но я в настоящее время понятия не имею, чтобы сравнить 2 типа и узнать большее между этими двумя.

3

Решение

В случае, если вы хотите 16 вместо 2 для int16_t

sizeof(my_var) * CHAR_BIT

sizeof дать вам сколько байтов, и CHAR_BIT дать вам сколько бит в байте (обычно 8)

4

Другие решения

Доступные синтаксисы для команды (sizeof):

  • sizeof (тип)
  • размер выражения

Они оба возвращаются std::size_t,

Примеры типов int, float, doubleв то время как выражения могут оценить размер объекта. Для уточнения добавлю следующее:

sizeof(int);     // Return size of int type.
sizeof(float);   // Return size of float type.
sizeof(double);  // Return size of double type.

struct my_struct {};  // Creates an empty struct named my_struct.
my_struct alpha;      // Initializes alpha as a my_struct.
sizeof alpha;         // Returns size of alpha.

Дополнительную информацию можно найти Вот.

Надеюсь, поможет!

3

Чтобы вычислить размер типа в битах, используйте CHAR_BIT макрос в сочетании с sizeof оператор:

#include <cstdint>
#include <climits>

int16_t my_var;
int32_t size_of_var;

// size_of_var should be equal to 16 because my_var is a int16_t
size_of_var = CHAR_BIT * sizeof(int16_t);
2

Вы можете попробовать вот так:

size_of_var = sizeof(my_var);

В вашем случае вы можете попробовать с:

sizeof(my_var) * CHAR_BIT

На примечании стороны:

Стандарт C99 требует, чтобы

sizeof(short) <= sizeof(int) <= sizeof(long) < sizeof(long long)

Type           C99 Minimum     Windows 32bit
char           8               8
short          16              16
int            16              32
long           32              32
long long      64              64

Также int8_t гарантированно будет 8 бит, а также int16_t гарантированно будет 16 бит, и т.п.

2

Вам нужно использовать оператор sizeof.

size_of_var = sizeof(my_var);
1

Унарный оператор sizeof() вернет вам размер вашей переменной в байтах.

Используйте это так:

size_of_var = sizeof(my_var);
1

sizeof Оператор выдаст вам количество байтов, но вы спросите количество бит. Все компьютеры массового потребителя имеют восемь бит на байт, поэтому ваша функция может быть определена как:

template<typename T>
int bitsize(const T& var) {
return sizeof(var) * 8;
}

Есть, однако, некоторые очень специфические машины, которые не имеют восьми бит на байт. В этом случае вы можете использовать CHAR_BIT макрос:

#include <climits>

template<typename T>
int bitsize(const T& var) {
return sizeof(var) * CHAR_BIT;
}

Возможно, стоит отметить, что в этом случае лучше иметь макрос, который дает вам количество бит, а не функцию. Макрос всегда даст вам константу времени компиляции:

#include <climits>
#define BITSIZE(VAR) (sizeof(VAR) * CHAR_BIT)
1
По вопросам рекламы [email protected]