我正在寻找一个返回类型大小的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),但我目前不知道比较两种类型,并且知道这两种类型之间的较大。
答案 0 :(得分:4)
如果int16_t
sizeof(my_var) * CHAR_BIT
sizeof
给你多少字节,CHAR_BIT
给你一个字节中的多少位(通常为8)
答案 1 :(得分:3)
命令的可用语法(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.
可以找到更多信息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)