如何在C ++中获取类型的大小?

时间:2014-07-16 07:00:40

标签: c++ clang oclint

我正在寻找一个返回类型大小的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库,所以我可以得到一个Type(http://clang.llvm.org/doxygen/classclang_1_1Type.html),但我目前不知道比较两种类型,并且知道这两种类型之间的较大。

7 个答案:

答案 0 :(得分:4)

如果int16_t

需要16而不是2
sizeof(my_var) * CHAR_BIT

sizeof给你多少字节,CHAR_BIT给你一个字节中的多少位(通常为8)

答案 1 :(得分:3)

命令的可用语法(sizeof)为:

  • sizeof(type)
  • sizeof expression

他们都返回std::size_t

类型的示例是intfloatdouble,而表达式可以评估对象的大小。为澄清起见,我将添加以下内容:

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.

可以找到更多信息here

希望它有所帮助!

答案 2 :(得分: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位等。

答案 3 :(得分:2)

要以位为单位计算类型的大小,请将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);

答案 4 :(得分:1)

您需要使用sizeof运算符。

size_of_var = sizeof(my_var);

答案 5 :(得分:1)

一元运算符sizeof()将以字节为单位返回变量的大小。

像这样使用:

size_of_var = sizeof(my_var); 

答案 6 :(得分:1)

sizeof运算符将为您提供字节数,但您要求的位数。所有大众消费者计算机每字节有8位,因此您的功能可以定义为:

template<typename T>
int bitsize(const T& var) {
    return sizeof(var) * 8;
}
但是,有些非常特定的机器每字节不会有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)