C ++中的sizeof()运算符是做什么的

Peng Zhang

sizeof()用C经营者给其操作数在编译时的大小。它不评估其操作数。例如,

int ar1[10];
sizeof(ar1) // output 40=10*4
sizeof(ar1[-1]) // output 4
int ar2[ sizeof(ar1) ]; // generate an array of 40 ints.

当涉及到C ++模板类时,我发现了一些奇怪的结果。

template<typename T>
struct S{
    T a;
};

sizeof( S<int> )       // output 4
sizeof( S<bool> )      // output 1
sizeof( vector<int> )  // output 24
sizeof( vector<char> ) // output 24
sizeof( vector<bool> ) // output 40

我猜sizeofon或其他STL容器取决于特定的环境。

问题1.如何sizeof在C / C ++中实现?它不能是运行时函数。是宏吗?(我在在线教学视频中学到了什么)。如果它是一个宏,#define它看起来像什么?什么时候sizeof()执行?

问题2.如果我将成员方法添加void f(){}到的定义struct Ssizeof(S<int>)仍然是4。不应该增加结构的大小?

问题3. STL容器是模板类。就拿vector例如,它有12个成员的属性/类型的许多成员方法?很容易解释的输出sizeof( S<int> )但是我发现很难解释的输出sizeof( vector<int> )模板类应在编译时实例化,并且编译器应完全了解类的大小,即vector<int>因此sizeof()操作员应该知道。

亚历山大·盖斯勒

按照问题1sizeof由编译器实现和评估。它不是宏,并且始终提供编译时结果。从概念上讲,您可以想象编译器用sizeof数字替换每个数字。

根据问题2sizeof计算一个实例S占用的存储量方法不按实例存储,而仅按字段存储(因为每个实例存在一次)。但是,方法确实会在某处占用静态存储空间以保存该功能的机器代码。

按照问题3:对于sizeof(vector<int>)编译器,计算vector<int>实例化的大小如果您因为avector可以是可变大小而感到困惑:是的,那是多余的存储空间是从堆分配的,因此不会反映在sizeof应用于a的结果中vector

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C和C ++中sizeof()运算符的返回值

来自分类Dev

C ++中的“ << / >>”运算符

来自分类Dev

什么是C ++中的“ <?=”运算符?

来自分类Dev

C ++中的sizeof()运算符是做什么的

来自分类Dev

什么是C / C ++中的“->”运算符?

来自分类Dev

==运算符到底是做什么的?

来自分类Dev

在C中的数组列上使用“ sizeof”运算符

来自分类Dev

+ = C ++中的运算符

来自分类Dev

将C#转换为vb.net。与比较运算符和接口做什么?

来自分类Dev

为什么“ as”运算符在C#中不使用隐式转换运算符?

来自分类Dev

C ++中sizeof运算符的操作

来自分类Dev

在C ++中的非POD类型上使用sizeof运算符是否安全?

来自分类Dev

这个运算符在c ++中做什么?

来自分类Dev

运算符“”在C ++中做什么?

来自分类Dev

为什么在NOT操作的情况下C中的sizeof运算符给出不同的输出?

来自分类Dev

什么是C / C ++中的“->”运算符?

来自分类Dev

这个“ >> =”运算符在C中是什么意思?

来自分类Dev

什么是C ++中的“ <?=“运算符?

来自分类Dev

澄清:是什么使“ new”成为C ++中的运算符

来自分类Dev

| =运算符到底是做什么的?

来自分类Dev

〜>运算符是做什么的?

来自分类Dev

C#中的“ <<”运算符是什么意思

来自分类Dev

作为C#中的运算符,+-会做什么

来自分类Dev

C中sizeof运算符的实现

来自分类Dev

+ =运算符在提供的C#代码中做什么?

来自分类Dev

sizeof运算符在C中如何工作?

来自分类Dev

struct中的运算符“:”在C中意味着什么?

来自分类Dev

C 中的小于运算符还有什么含义?

来自分类Dev

为什么 sizeof() 运算符在 C 中为“a”和“a”提供不同的值?

Related 相关文章

热门标签

归档