草庐IT

WPRINTF_SIZEOF

全部标签

c++ - 类定义中的 sizeof(*this)

我们可以这样做吗:#includeclassFoo{public:Foo(){std::cout在C标准中,我看到以下内容:ISO/IEC9899:20116.7.2.1Structureandunionspecifiers8...Thetypeisincompleteuntilimmediatelyafterthe}thatterminatesthelist,andcompletethereafter.但在C++标准中我找不到任何类似物。sizeof运算符不能用于类型不完整的表达式,这样的代码能不能写? 最佳答案 是的,您可以编写

c++ - C++ 中具有 int、函数、虚函数的 sizeof 类?

这是一个在线C++测试题,已经完成。#includeusingnamespacestd;classA{};classB{inti;};classC{voidfoo();};classD{virtualvoidfoo();};classE{inti;virtualvoidfoo();};classF{inti;voidfoo();};classG{voidfoo();inti;voidfoo1();};classH{inti;virtualvoidfoo();virtualvoidfoo1();};intmain(){cout输出:sizeof(classA):1sizeof(class

c++ - 获取 sizeof(promoted(x)) 的标准方法

这个问题在这里已经有了答案:Typetraittoobtaindefaultargumentpromotions(3个回答)关闭7年前。是否有一种标准方法可以获取变量在作为可变参数传递时将提升到的类型的大小?autox=...;autoy=sizeof(promoted(x));结果应该是:char->sizeof(int)int->sizeof(int)float->sizeof(double)... 最佳答案 autos=sizeof(+x);应该对整数起作用。+x使用一元+运算符,它像任何其他算术运算符一样执行整数提升。我不知

c++ - sizeof 是做什么的?

sizeof的主要功能是什么(我是C++新手)。比如intk=7;chart='Z';sizeof(k)或sizeof(int)和sizeof(char)是什么意思? 最佳答案 sizeof(x)返回变量或类型x占用的内存量(以字节为单位)。它与变量的值无关。例如,如果您有一个任意类型的数组T,那么该数组元素之间的距离就是sizeof(T)。inta[10];assert(&(a[0])+sizeof(int)==&(a[1]));在变量上使用时,相当于在该变量的类型上使用:Tx;assert(sizeof(T)==sizeof(x

c++ - 编译时 sizeof_array 不使用宏

这只是过去几天一直困扰我的事情,我认为不可能解决,但我以前见过模板魔术。这里是:要获取标准C++数组中的元素数量,我可以使用宏(1)或类型安全的内联函数(2):(1)#definesizeof_array(ARRAY)(sizeof(ARRAY)/sizeof(ARRAY[0]))(2)templatesize_tsizeof_array(constT&ARRAY){return(sizeof(ARRAY)/sizeof(ARRAY[0]));}如您所见,第一个存在宏的问题(目前我认为这是一个问题),而另一个存在无法在编译时获取数组大小的问题;即我不会写:enumENUM{N=size

c++ - sizeof(std::list<T>) 可以因不同类型的 T 而有所不同吗?

我可以假设对于任何类型T,类型std::list将有相同的,恒定的大小?为了清楚起见,我的意思是“主”类型本身的大小,而不是它分配的内存。在我看来,假设T的大小是合乎逻辑的。本身应该只影响使用分配器分配的列表节点的大小。但是,有两件事可能会导致sizeof(std::list)的变化。我能想到:试图“优化”std::list的标准C++库输入一些Tstd::list中的实例本身。这对我来说似乎是个坏主意,它可能违反了标准提出的“恒定时间”要求;标准C++库特化为std::list对于某些类型,特化具有不同的大小。我想不出(1)或(2)的任何用途,但我可能错了。我想要实现的是使用std:

c++ - sizeof(size_t) == sizeof(void*) 总是正确的吗?

C99/C++11标准是否保证sizeof(size_t)==sizeof(void*)总是正确的?size_tf(void*p){return(size_t)(p);//Isitsafe?}void*f(size_tn){return(void*)(n);//Isitsafe?} 最佳答案 不,不能保证。使用intptr_t或uintptr_t将指针安全地存储在整数中。存在/曾经是错误的架构是有意义的,例如分段DOS内存模型。那里的内存是由64k段构成的——一个对象永远不会大于一个段,所以16位size_t就足够了。但是,指针具有

c++ - 为什么-1 > sizeof(int)?

考虑以下代码:templateclassStaticAssert;templateclassStaticAssert{};StaticAssertxyz1;//CompileerrorStaticAssertsizeof(int))>xyz2;//OK为什么-1>sizeof(int)为真?-1是不是先提升为unsigned(-1)再unsigned(-1)>sizeof(int).如果sizeof(int)为4,-1>sizeof(int)是否等价于-1>size_t(4)。如果是这样为什么-1>size_t(4)是假的?这是符合C++标准的吗? 最佳答案

c++ - 为什么 sizeof 不解析结构成员?

我知道sizeof是编译时计算,但这对我来说似乎很奇怪:编译器可以采用类型名称或表达式(从中推断出类型)。但是你如何识别一个类中的类型呢?似乎唯一的方法是传递一个表达式,这似乎很笨重。structX{intx;};intmain(){//returnsizeof(X::x);//doesn'tworkreturnsizeof(X()::x);//works,andrequiresXtobedefault-constructible} 最佳答案 另一种方法无需默认构造函数即可工作:returnsizeof(((X*)0)->x);您可

c++ - 当 A 和 B 为 "the same"时断言(sizeof(A) == sizeof(B)) 是否安全?

假设我有两个类,我希望它们具有完全相同的内存布局:structA{intx;inty;};/*possiblymorecode*/structB{inta;intb;};标准中是否有任何内容可以保证我可以安全地static_assert(sizeof(A)==sizeof(B))?作为一个较弱的变体考虑structC{inta;};static_assert(sizeof(A)>=sizeof(C));//canthiseverfail?static_assert(sizeof(A)>sizeof(C));//canthiseverfail?问题由thisone触发.天真地我不希望任何