为什么int在64位编译器上通常是32位?当我开始编程时,我被教导int通常与底层架构具有相同的宽度。而且我同意这也是有道理的,我发现未指定宽度的整数与底层平台一样宽是合乎逻辑的(除非我们谈论的是8位或16位机器,其中int的范围如此之小>几乎不适用)。后来我了解到int在大多数64位平台上通常是32位的。所以我想知道这是什么原因。对于存储数据,我更喜欢明确指定的数据类型宽度,因此这留下了int的通用用法,它不会提供任何性能优势,至少在我的系统上我具有相同的性能32位和64位整数。这样就剩下二进制内存占用了,虽然不会减少很多... 最佳答案
这个问题在这里已经有了答案:Whydoessizeof(x++)notincrementx?(10个回答)关闭2年前。在C或C++中,递增和递减运算符(++n、--n)在sizeof()运算符。intn=100;intsize_int=sizeof(++n);std::cout我已经编写了这段代码并运行了程序。当然,我认为101会为我展示。但是,n不是101,而是100。这是为什么呢? 最佳答案 在C++中,sizeof中的表达式不被计算,除了C99的VLA如评论中所述,因为这之前也被标记为Csizeof运算符是在编译时计算的。只有
这个问题在这里已经有了答案:Whydoessizeof(x++)notincrementx?(10个回答)关闭2年前。在C或C++中,递增和递减运算符(++n、--n)在sizeof()运算符。intn=100;intsize_int=sizeof(++n);std::cout我已经编写了这段代码并运行了程序。当然,我认为101会为我展示。但是,n不是101,而是100。这是为什么呢? 最佳答案 在C++中,sizeof中的表达式不被计算,除了C99的VLA如评论中所述,因为这之前也被标记为Csizeof运算符是在编译时计算的。只有
我对C++很陌生,但我发现auto的这种行为很奇怪:classA{};intmain(){Aa;autox=-(sizeof(a));cout变量x在这种情况下是unsigned尽管我在变量初始化时使用了一元减号运算符。为什么只考虑了sizeof(std::size_t)的返回类型,而没有考虑到因为使用了操作符而存储的数字是负数?我知道size_t是一个无符号整数。我已经在GCC8.1.0和C++17中尝试过。 最佳答案 这里的实际问题是一元减号运算符的使用,就像其他内置算术运算符一样,是整体提升的主题。令人惊讶的是,将一元减号应用
我对C++很陌生,但我发现auto的这种行为很奇怪:classA{};intmain(){Aa;autox=-(sizeof(a));cout变量x在这种情况下是unsigned尽管我在变量初始化时使用了一元减号运算符。为什么只考虑了sizeof(std::size_t)的返回类型,而没有考虑到因为使用了操作符而存储的数字是负数?我知道size_t是一个无符号整数。我已经在GCC8.1.0和C++17中尝试过。 最佳答案 这里的实际问题是一元减号运算符的使用,就像其他内置算术运算符一样,是整体提升的主题。令人惊讶的是,将一元减号应用
代码:#includeusingnamespacestd;intmain(){size_ti=sizeofnewint;cout在GCC编译器中,工作正常,没有任何警告或错误,并打印输出8.但是,在clang编译器中,我收到了以下警告:warning:expressionwithsideeffectshasnoeffectinanunevaluatedcontext[-Wunevaluated-expression]size_ti=sizeofnewint;哪一个是真的?sizeofnewint;是未定义的行为吗? 最佳答案 警告没
代码:#includeusingnamespacestd;intmain(){size_ti=sizeofnewint;cout在GCC编译器中,工作正常,没有任何警告或错误,并打印输出8.但是,在clang编译器中,我收到了以下警告:warning:expressionwithsideeffectshasnoeffectinanunevaluatedcontext[-Wunevaluated-expression]size_ti=sizeofnewint;哪一个是真的?sizeofnewint;是未定义的行为吗? 最佳答案 警告没
在C++IS的C.1.3(2003。它也在C++11IS中)中,该标准指出了ISOC和C++之间的区别;即,对于chararr[100];sizeof(0,arr)在C中返回sizeof(char*),但在C++中返回100。我找不到sizeof采用两个参数的文档。明显的后备是逗号运算符,但我不这么认为:C中的sizeof(arr)is100;sizeof(0,arr)是sizeof(char*)。sizeof(0,arr)和sizeof(arr)在C++中都是100。在这种情况下,我可能错过了IS的全部要点。任何人都可以帮忙吗?这类似于09年讨论的一个问题,但没有人提到IS,而且我认
在C++IS的C.1.3(2003。它也在C++11IS中)中,该标准指出了ISOC和C++之间的区别;即,对于chararr[100];sizeof(0,arr)在C中返回sizeof(char*),但在C++中返回100。我找不到sizeof采用两个参数的文档。明显的后备是逗号运算符,但我不这么认为:C中的sizeof(arr)is100;sizeof(0,arr)是sizeof(char*)。sizeof(0,arr)和sizeof(arr)在C++中都是100。在这种情况下,我可能错过了IS的全部要点。任何人都可以帮忙吗?这类似于09年讨论的一个问题,但没有人提到IS,而且我认
对于任何对象类型T,是否总是sizeof(T)至少与alignof(T)一样大?直觉上似乎是这样,因为即使您调整对象的对齐方式,例如:structsmall{charc;};在正常情况下,它们的“大小”也向上调整,以便数组中对象之间的关系在保持对齐的同时有意义(至少在我的testing中。例如:structalignas(16)small16{charc;};大小和对齐方式均为16。 最佳答案 至少在标准C++中,对于任何可以创建数组(长度>1)的东西,都必须是这样。如果你有Fooarr[2];和alignof(Foo)>sizeo