我在标准文档中找不到答案。C++语言标准是否要求sizeof(bool)始终为1(对于1个字节),还是这个大小是实现定义的? 最佳答案 sizeof(bool)是实现定义的,标准特别强调了这一事实。§5.3.3/1,删节:sizeof(char),sizeof(signedchar)andsizeof(unsignedchar)are1;theresultofsizeofappliedtoanyotherfundamentaltypeisimplementation-defined.[Note:inparticular,sizeof
要查找PHP$array中的元素个数,哪个更快/更好/更强?count($array)或sizeof($array)?编辑感谢安迪·莱斯特(AndyLester),我从多语言的角度改进了我的问题。手动评论者说"[sizeof]doesnotmeanthesameinmanyotherlanguagesbasedonC"这是真的吗? 最佳答案 如果它们相同,我会使用count(),因为根据我的经验,它更常见,因此会导致更少的开发人员阅读您的代码说“sizeof(),那是什么?”并且必须查阅文档。我认为这意味着sizeof()不像在C中
在尝试使用C++17折叠表达式时,我尝试实现maxsizeof,其中结果是类型sizeof的最大值。我有一个使用变量和lambda的丑陋折叠版本,但我想不出一种使用折叠表达式和std::max()来获得相同结果的方法。这是我的折叠版本:templateconstexprsize_tmax_sizeof(){size_tmax=0;autoupdate_max=[&max](constsize_t&size){if(max()==8);static_assert(max_sizeof()==sizeof(float));static_assert(max_sizeof()==4);我想使
在尝试使用C++17折叠表达式时,我尝试实现maxsizeof,其中结果是类型sizeof的最大值。我有一个使用变量和lambda的丑陋折叠版本,但我想不出一种使用折叠表达式和std::max()来获得相同结果的方法。这是我的折叠版本:templateconstexprsize_tmax_sizeof(){size_tmax=0;autoupdate_max=[&max](constsize_t&size){if(max()==8);static_assert(max_sizeof()==sizeof(float));static_assert(max_sizeof()==4);我想使
为什么sizeof运算符返回的结构大小大于结构成员的总大小? 最佳答案 这是因为添加了填充以满足对齐约束。Datastructurealignment影响程序的性能和正确性:未对齐的访问可能是硬错误(通常是SIGBUS)。未对齐的访问可能是一个软错误。在硬件中进行了修正,以适度降低性能。或通过软件中的仿真进行纠正,从而导致严重的性能下降。此外,原子性和其他并发保证可能会被破坏,从而导致细微的错误。这是一个使用x86处理器的典型设置的示例(全部使用32位和64位模式):structX{shorts;/*2bytes*//*2paddi
为什么C和C++中的基本类型没有像Java中那样严格定义,其中int总是4个字节,long是8个字节,等等。据我所知C和C++只有一个char被定义为1个字节,其他所有内容由不同的编译器定义不同。因此,C和C++中的int不必一定是4个字节,只要它比short长并且short更长>char.我只是想知道为什么会这样,它有什么用吗? 最佳答案 原因很大程度上是因为C可以移植到更多种类的平台上。不同数据类型在不同平台上的大小不同的原因有很多,但至少从历史上看,int已被调整为平台的原生字长。在PDP-11上它是16位(而long最初是为
为什么C和C++中的基本类型没有像Java中那样严格定义,其中int总是4个字节,long是8个字节,等等。据我所知C和C++只有一个char被定义为1个字节,其他所有内容由不同的编译器定义不同。因此,C和C++中的int不必一定是4个字节,只要它比short长并且short更长>char.我只是想知道为什么会这样,它有什么用吗? 最佳答案 原因很大程度上是因为C可以移植到更多种类的平台上。不同数据类型在不同平台上的大小不同的原因有很多,但至少从历史上看,int已被调整为平台的原生字长。在PDP-11上它是16位(而long最初是为
我只是想知道我的笔记本电脑是64位还是32位机器。(它是64)。所以,我考虑打印以下内容:intmain(){printf("%d",sizeof(int));}结果是4,看起来很奇怪(因为是64位机器)但是,当我打印这个时:intmain(){printf("%d",sizeof(int*));}结果是8,这更有意义。问题是:由于我使用的是64位机器,因此int等原始类型不应该使用8个字节(64位),那么sizeofint应该是8?为什么不是这样?为什么int*的大小是8?这里有点困惑,先谢谢了。 最佳答案 不,sizeof(in
我只是想知道我的笔记本电脑是64位还是32位机器。(它是64)。所以,我考虑打印以下内容:intmain(){printf("%d",sizeof(int));}结果是4,看起来很奇怪(因为是64位机器)但是,当我打印这个时:intmain(){printf("%d",sizeof(int*));}结果是8,这更有意义。问题是:由于我使用的是64位机器,因此int等原始类型不应该使用8个字节(64位),那么sizeofint应该是8?为什么不是这样?为什么int*的大小是8?这里有点困惑,先谢谢了。 最佳答案 不,sizeof(in
为什么int在64位编译器上通常是32位?当我开始编程时,我被教导int通常与底层架构具有相同的宽度。而且我同意这也是有道理的,我发现未指定宽度的整数与底层平台一样宽是合乎逻辑的(除非我们谈论的是8位或16位机器,其中int的范围如此之小>几乎不适用)。后来我了解到int在大多数64位平台上通常是32位的。所以我想知道这是什么原因。对于存储数据,我更喜欢明确指定的数据类型宽度,因此这留下了int的通用用法,它不会提供任何性能优势,至少在我的系统上我具有相同的性能32位和64位整数。这样就剩下二进制内存占用了,虽然不会减少很多... 最佳答案