草庐IT

c++ - 是否保证 sizeof(T[N]) == N * sizeof(T)?

我一直假设T类型的N个元素的数组的大小,如sizeof返回的那样,保证正好是sizeof(T)。commentsonthisquestion虽然让我怀疑。有信誉的用户声称数组可能包含填充,这会破坏相等性。当然,这样的平台可能不存在,但它们被允许吗?如果允许,这将打破许多常见的习语,例如使用N*sizeof(T)计算数组所需的存储空间,或使用计算数组中的元素数量sizeof(a)/sizeof(a[0])。 最佳答案 是的。[expr.sizeof]包含关于sizeof的这一点:Whenappliedtoanarray,theresu

c++ - 为什么 "error: invalid application of ' sizeof' 为使用 unique_ptr 的不完整类型”通过添加空析构函数来修复?

这个问题在这里已经有了答案:Isstd::unique_ptrrequiredtoknowthefulldefinitionofT?(9个回答)关闭7年前。我在类里面拉皮条STFT.在header中用这个编译就好了:classSTFT;//pimplofftopreventpointnameclashclassWhatever{private:STFT*stft;这在实现中:#include"STFT.h"Whatever::Whatever():stft(newSTFT()){//blahblah}Whatever::~Whatever(){deletestft;//pureevil

c++ - unsigned关键字会影响sizeof的结果吗?

C和C++是否保证类型的无符号等价物具有相同的大小?例子:size_tsize=sizeof(unsignedint);unsigned在这里完全没有实际意义吗? 最佳答案 两种语言都保证相应标准整数类型的有符号和无符号变体具有相同的大小。C++,委员会草案n3337,3.9.1/3:3Foreachofthestandardsignedintegertypes,thereexistsacorresponding(butdifferent)standardun-signedintegertype:“unsignedchar”,“un

c++ - 在 std::enable_if 中使用 sizeof...

下面的代码无法编译,我就是想不通为什么。templatetypenamestd::enable_if0>::typefunc(){//nop}产生的错误信息是:error:expectedunqualified-idbeforenumericconstanttypenamestd::enable_if0u>::typefunc(){^ 最佳答案 您需要括号才能让编译器正确解析它:templatetypenamestd::enable_if0)>::typefunc(){^^//nop}

c++ - 为什么 sizeof(13.33) 是 8 个字节?

当我给sizeof(a)时,其中a=13.33是一个浮点变量,大小是4个字节。但是如果我直接给sizeof(13.33),大小就是8个字节。我不明白发生了什么。有人可以帮忙吗? 最佳答案 这些是语言的规则。13.33是一个数字文字。它被视为double,因为它是double的。如果您希望将13.33视为浮点字面值,则声明13.33f。13.33是双重文字。如果sizeof(float)==4,sizeof(13.33f)==4也应该成立,因为13.33f是一个float。 关于c++-为

c++ - 为什么使用默认构造函数构造的对象的 `sizeof` 总是得到 1?

当我写下面的代码时:#includestructgg{gg(){}inta,b,c;};intmain(){std::cout结果是1。但是当我使用非默认构造函数时,就像这样:#includestructgg{gg(intx){}inta,b,c;};intmain(){std::cout输出为12。因为这两个示例在gg中具有相同的数据成员,所以我希望它们都产生相同的输出。为什么sizeof(gg())结果是1? 最佳答案 sizeof有两个版本。一个需要一元表达式,另一个需要带括号的type-id。第一个版本未评估其操作数。以下是

c++ - 如何理解 "C++ allows sizeof(char*) != sizeof(int*)"?

我正在读这个post与char和byte相关,并遇到以下单词:Anint*couldstillbeimplementedasasinglehardwarepointer,sinceC++allowssizeof(char*)!=sizeof(int*).如何理解'C++允许sizeof(char*)!=sizeof(int*)'? 最佳答案 有些(或曾经)机器只能处理整个“单词”,其中一个单词大到足以容纳多个字符。例如,PDP-6/10的字长为36位。在这样的机器上,您可以实现9位字节并将字节指针表示为字指针和字内位索引的组合。一个

c++ - 为什么在 C++0x 中有一个 sizeof... 运算符?

我看到@GMan实现了aversionofsizeof...对于可变参数模板,它(据我所知)相当于内置的sizeof...。这不违背第二个设计原则吗:preferlibrariestolanguageextensions? 最佳答案 来自VariadicTemplates(Revision3)(N2080=06-0150),第6页:Althoughnotstrictlynecessary(wecanimplementcountwithoutthisfeature),checkingthelengthofaparameterpacki

c++ - sizeof *这个对象

代码:#includeclassmyc{intdummy;public:intsi(){returnsizeof(*this);}};classd_myc:publicmyc{intd_dummy;};intmain(){myca;d_mycb;printf("%d%d\n%d%d",a.si(),b.si(),sizeof(a),sizeof(b));return0;}输出:4448我预计:4848为什么我的预期是错误的? 最佳答案 sizeof在编译时解析,而不是运行时。所以sizeof(*this)等同于sizeof(myc)

c++ - sizeof 操作数得到评估?

AFAIKsizeof不会评估它的C++操作数。例如intx=0;sizeof(x+=1);//valueofxisnotchanged但是这是什么意思呢?intarr[5];sizeof(arr+0);//herearrayisconvertedtopointer这里为什么要对数组进行运算?(§5.3.3/4)Thelvalue-to-rvalue(4.1),array-to-pointer(4.2),andfunction-to-pointer(4.3)standardconversionsarenotappliedtotheoperandofsizeof.