草庐IT

c++ - sizeof(bool) 是否在 C++ 语言标准中定义?

我在标准文档中找不到答案。C++语言标准是否要求sizeof(bool)始终为1(对于1个字节),还是这个大小是实现定义的? 最佳答案 sizeof(bool)是实现定义的,标准特别强调了这一事实。§5.3.3/1,删节:sizeof(char),sizeof(signedchar)andsizeof(unsignedchar)are1;theresultofsizeofappliedtoanyotherfundamentaltypeisimplementation-defined.[Note:inparticular,sizeof

PHP数组: count or sizeof?

要查找PHP$array中的元素个数,哪个更快/更好/更强?count($array)或sizeof($array)?编辑感谢安迪·莱斯特(AndyLester),我从多语言的角度改进了我的问题。手动评论者说"[sizeof]doesnotmeanthesameinmanyotherlanguagesbasedonC"这是真的吗? 最佳答案 如果它们相同,我会使用count(),因为根据我的经验,它更常见,因此会导致更少的开发人员阅读您的代码说“sizeof(),那是什么?”并且必须查阅文档。我认为这意味着sizeof()不像在C中

c++ - 我可以使用折叠表达式实现 max(A, max(B, max(C, D))) 吗?

在尝试使用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++ - 我可以使用折叠表达式实现 max(A, max(B, max(C, D))) 吗?

在尝试使用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++ - 为什么结构的 sizeof 不等于每个成员的 sizeof 之和?

为什么sizeof运算符返回的结构大小大于结构成员的总大小? 最佳答案 这是因为添加了填充以满足对齐约束。Datastructurealignment影响程序的性能和正确性:未对齐的访问可能是硬错误(通常是SIGBUS)。未对齐的访问可能是一个软错误。在硬件中进行了修正,以适度降低性能。或通过软件中的仿真进行纠正,从而导致严重的性能下降。此外,原子性和其他并发保证可能会被破坏,从而导致细微的错误。这是一个使用x86处理器的典型设置的示例(全部使用32位和64位模式):structX{shorts;/*2bytes*//*2paddi

c++ - 为什么除了 char 之外的内置类型 sizeof 在 C 和 C++ 中依赖于编译器?

为什么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++ - 为什么除了 char 之外的内置类型 sizeof 在 C 和 C++ 中依赖于编译器?

为什么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++ - 64 位机器上 int 和 sizeof int 指针的大小

我只是想知道我的笔记本电脑是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

c++ - 64 位机器上 int 和 sizeof int 指针的大小

我只是想知道我的笔记本电脑是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

c++ - 为什么 int 在 64 位编译器上通常是 32 位?

为什么int在64位编译器上通常是32位?当我开始编程时,我被教导int通常与底层架构具有相同的宽度。而且我同意这也是有道理的,我发现未指定宽度的整数与底层平台一样宽是合乎逻辑的(除非我们谈论的是8位或16位机器,其中int的范围如此之小>几乎不适用)。后来我了解到int在大多数64位平台上通常是32位的。所以我想知道这是什么原因。对于存储数据,我更喜欢明确指定的数据类型宽度,因此这留下了int的通用用法,它不会提供任何性能优势,至少在我的系统上我具有相同的性能32位和64位整数。这样就剩下二进制内存占用了,虽然不会减少很多... 最佳答案