7

我正在寻找一个返回类型大小的 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)但我目前不知道比较两种类型并知道它们之间的更大二。

4

7 回答 7

8

如果您想要 16 而不是 2int16_t

sizeof(my_var) * CHAR_BIT

sizeof给你多少字节,CHAR_BIT给你一个字节有多少位(通常是8)

于 2014-07-16T07:05:10.847 回答
6

命令 (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.

更多信息可以在这里找到。

希望能帮助到你!

于 2014-07-16T07:04:05.180 回答
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位等。

于 2014-07-16T07:03:36.980 回答
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);
于 2014-07-16T07:05:15.877 回答
1

您需要使用 sizeof 运算符。

size_of_var = sizeof(my_var);
于 2014-07-16T07:03:15.220 回答
1

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

像这样使用它:

size_of_var = sizeof(my_var); 
于 2014-07-16T07:04:07.917 回答
1

操作员会给你字节数,sizeof但你要求位数。所有大众消费计算机每个字节都有 8 位,因此您的函数可以定义为:

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)
于 2014-07-16T07:09:19.297 回答