C和C++是否保证类型的无符号等价物具有相同的大小?例子:size_tsize=sizeof(unsignedint);unsigned在这里完全没有实际意义吗? 最佳答案 两种语言都保证相应标准整数类型的有符号和无符号变体具有相同的大小。C++,委员会草案n3337,3.9.1/3:3Foreachofthestandardsignedintegertypes,thereexistsacorresponding(butdifferent)standardun-signedintegertype:“unsignedchar”,“un
下面的代码无法编译,我就是想不通为什么。templatetypenamestd::enable_if0>::typefunc(){//nop}产生的错误信息是:error:expectedunqualified-idbeforenumericconstanttypenamestd::enable_if0u>::typefunc(){^ 最佳答案 您需要括号才能让编译器正确解析它:templatetypenamestd::enable_if0)>::typefunc(){^^//nop}
当我给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++-为
当我写下面的代码时:#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。第一个版本未评估其操作数。以下是
我正在读这个post与char和byte相关,并遇到以下单词:Anint*couldstillbeimplementedasasinglehardwarepointer,sinceC++allowssizeof(char*)!=sizeof(int*).如何理解'C++允许sizeof(char*)!=sizeof(int*)'? 最佳答案 有些(或曾经)机器只能处理整个“单词”,其中一个单词大到足以容纳多个字符。例如,PDP-6/10的字长为36位。在这样的机器上,您可以实现9位字节并将字节指针表示为字指针和字内位索引的组合。一个
我看到@GMan实现了aversionofsizeof...对于可变参数模板,它(据我所知)相当于内置的sizeof...。这不违背第二个设计原则吗:preferlibrariestolanguageextensions? 最佳答案 来自VariadicTemplates(Revision3)(N2080=06-0150),第6页:Althoughnotstrictlynecessary(wecanimplementcountwithoutthisfeature),checkingthelengthofaparameterpacki
我知道您不应该将打印与printf,cout和wprintf,wcout混合使用,但是很难找到一个好的答案,为什么以及是否可以绕过它。问题是我使用了一个用printf打印的外部库,而我自己使用了wcout。如果我做一个简单的例子,它工作正常,但从我的完整应用程序来看,它根本不打印printf语句。如果这真的是一个限制,那么就会有许多库无法与广泛的打印应用程序一起工作。我们非常欢迎对此有任何见解。更新:我把它归结为:#include#include#include#include#includeintmain(){char*buf;std::wcout所以我想这可能是冲水问题,但我还是觉
代码:#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)
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.
我对sizeof运算符的评估时间感到困惑。什么时候评估sizeof运算符?它的评估时间(编译时或运行时)是否取决于语言(C?C++?)?对于在C++中运行时创建的对象,我们可以使用sizeof吗? 最佳答案 几乎在所有情况下,sizeof都是基于静态类型信息求值的(基本上是在编译时)。C99的可变长度数组(VLA)是一个异常(exception)(我认为是唯一的异常(exception))。 关于c++-sizeof是在编译时还是运行时求值?,我们在StackOverflow上找到一个类