Questions tagged «sizeof»

sizeof是指标准C / C ++运算符,用于返回表达式或数据类型的字节大小。


5
为什么lambda的大小为1个字节?
我正在使用C ++中的一些lambda进行内存存储,但是我对它们的大小有些不解。 这是我的测试代码: #include <iostream> #include <string> int main() { auto f = [](){ return 17; }; std::cout << f() << std::endl; std::cout << &f << std::endl; std::cout << sizeof(f) << std::endl; } 您可以在此处运行它:http : //fiddle.jyt.io/github/b13f682d1237eb69ebdc60728bb52598 输出是: 17 0x7d90ba8f626f 1 这表明我的λ大小为1。 这怎么可能? lambda至少不应该是其实现的指针吗?
89 c++  c++11  lambda  c++14  sizeof 



4
这个结构如何具有sizeof == 0?
有一则旧帖子要求一种sizeof可以返回的结构0。来自高声誉用户的一些高分答案说,按标准,类型或变量的大小不能为0。我同意100%。 但是,有一个新的答案介绍了此解决方案: struct ZeroMemory { int *a[0]; }; 我本来打算对它进行投票和评论,但是在这里花费的时间使我什至可以检查我100%确信的事情。所以......我既惊喜gcc和clang表现出同样的结果:sizeof(ZeroMemory) == 0。更重要的是,变量的sizeof是0: ZeroMemory z{}; static_assert(sizeof(z) == 0); // Awkward... 哇...? Godbolt链接 这怎么可能?

10
空隙的大小是多少?
这句话会产生什么? void *p = malloc(sizeof(void)); 编辑:问题的扩展。 如果sizeof(void)在GCC编译器中产生1,则分配1字节的内存,指针p指向该字节,p ++是否会递增为0x2346?假设p为0x2345。我说的是p,而不是* p。


8
C ++中的枚举类型数据的大小是多少?
这是一个C ++面试测试问题而不是作业。 #include <iostream> using namespace std; enum months_t { january, february, march, april, may, june, july, august, september, october, november, december} y2k; int main () { cout << "sizeof months_t is " << sizeof(months_t) << endl; cout << "sizeof y2k is " << sizeof(y2k) << endl; enum months_t1 { …
67 c++  enums  sizeof 

5
按位运算会导致意外的可变大小
语境 我们正在移植最初使用PIC单片机的8位C编译器编译的C代码。为了防止无符号全局变量(例如,错误计数器)回滚到零,使用了一个常见的习惯用法: if(~counter) counter++; 此处的按位运算符将所有位取反,并且仅当counter小于最大值时该语句才为真。重要的是,无论变量大小如何,此方法均有效。 问题 我们现在的目标是使用GCC的32位ARM处理器。我们注意到,相同的代码会产生不同的结果。据我们所知,按位补码运算返回的值与我们期望的大小不同。为了重现这一点,我们在GCC中进行编译: uint8_t i = 0; int sz; sz = sizeof(i); printf("Size of variable: %d\n", sz); // Size of variable: 1 sz = sizeof(~i); printf("Size of result: %d\n", sz); // Size of result: 4 在输出的第一行中,我们得到的是:i1个字节。但是,的按位补码i实际上是四个字节,这会引起问题,因为与此进行比较现在无法给出预期的结果。例如,如果这样做(在哪里i是正确初始化的uint8_t): if(~i) i++; 我们将看到i从0xFF到0x00的“环绕”。与以前的编译器和8位PIC微控制器中预期的运行方式相比,GCC的行为有所不同。 我们知道我们可以通过如下方式解决此问题: if((uint8_t)~i) i++; 或者,通过 if(i < 0xFF) …


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.