草庐IT

WPRINTF_SIZEOF

全部标签

c++ - 64 位 C++ 中的 sizeof(long)

我已经下载了MinGW-64,所以我现在可以使用g++4.7.0(实验性)为Windows7编译64位程序。但是下面一行:cout打印48,而不是88。g++4.6.0的文档说:The64-bitenvironmentsetsintto32bitsandlongandpointerto64bits有人知道为什么sizeof(long)不是8吗?已编辑添加:我感到困惑的原因是用于64位Windows的g++4.7.0(还)不是GNUCompilerCollection的官方部分。它是第一个具有32位long的64位版本,因此文档根本不适用于它。确实,如果您访问relevantwebpag

c++ - 64 位 C++ 中的 sizeof(long)

我已经下载了MinGW-64,所以我现在可以使用g++4.7.0(实验性)为Windows7编译64位程序。但是下面一行:cout打印48,而不是88。g++4.6.0的文档说:The64-bitenvironmentsetsintto32bitsandlongandpointerto64bits有人知道为什么sizeof(long)不是8吗?已编辑添加:我感到困惑的原因是用于64位Windows的g++4.7.0(还)不是GNUCompilerCollection的官方部分。它是第一个具有32位long的64位版本,因此文档根本不适用于它。确实,如果您访问relevantwebpag

c++ - 为什么 sizeof(string) == 32?

导致sizeof()为32的字符串结构中的开销是什么? 最佳答案 大多数现代std::string实现1将非常小的字符串直接保存在堆栈中的静态大小char数组中,而不是使用动态堆存储。这被称为Small(orShort)StringOptimisation(单点登录)。它允许实现避免小字符串对象的堆分配并提高引用的局部性。此外,将有一个std::size_t成员来保存字符串大小和一个指向实际char存储的指针。具体实现的方式有所不同,但以下几行是可行的:templatestructbasic_string{char*begin_;s

c++ - 为什么 sizeof(string) == 32?

导致sizeof()为32的字符串结构中的开销是什么? 最佳答案 大多数现代std::string实现1将非常小的字符串直接保存在堆栈中的静态大小char数组中,而不是使用动态堆存储。这被称为Small(orShort)StringOptimisation(单点登录)。它允许实现避免小字符串对象的堆分配并提高引用的局部性。此外,将有一个std::size_t成员来保存字符串大小和一个指向实际char存储的指针。具体实现的方式有所不同,但以下几行是可行的:templatestructbasic_string{char*begin_;s

c++ - "sizeof"一个类或对象可以为零吗?

我们都知道空类或空类对象的大小为1字节。我遇到了sizeof一个类及其对象为0的情况。该程序在语法上是正确的,因为没有编译或运行时错误。这是未定义的行为吗?我试图执行的用例是否有意义并且看起来像一个有效的用例?不为类中的数组提供确切的下标或大小是否是一个大错误?代码片段如下:#includeusingnamespacestd;classA{chara[];};intmain(){Ab;cout输出:00sizeof一个空类是一个字节(基本上非零),其原因类似于“确保不同的对象具有不同的地址”。在这种情况下,当sizeof类归零时会发生什么?注意:对于inta[]也观察到相同的行为。

c++ - "sizeof"一个类或对象可以为零吗?

我们都知道空类或空类对象的大小为1字节。我遇到了sizeof一个类及其对象为0的情况。该程序在语法上是正确的,因为没有编译或运行时错误。这是未定义的行为吗?我试图执行的用例是否有意义并且看起来像一个有效的用例?不为类中的数组提供确切的下标或大小是否是一个大错误?代码片段如下:#includeusingnamespacestd;classA{chara[];};intmain(){Ab;cout输出:00sizeof一个空类是一个字节(基本上非零),其原因类似于“确保不同的对象具有不同的地址”。在这种情况下,当sizeof类归零时会发生什么?注意:对于inta[]也观察到相同的行为。

c++ - 为什么我在应用 sizeof 运算符时会得到不同的结果?

我有这个程序#includeintmain(){chararr[100];printf("%d",(int)sizeof(0,arr));}这在编译为C文件时打印4,并在C++文件中打印100。为什么?我正在使用gcc。 最佳答案 在C中,逗号运算符右侧操作数的结果具有类型和值。在C中,逗号运算符不会产生左值。因此存在左值到右值的转换,导致数组类型衰减为指针类型。所以在C中你得到的是sizeof(char*).的结果在C++中,逗号表达式的结果是左值。没有这样的转换[如在C中],你得到的是sizeof(arr)即100

c++ - 为什么我在应用 sizeof 运算符时会得到不同的结果?

我有这个程序#includeintmain(){chararr[100];printf("%d",(int)sizeof(0,arr));}这在编译为C文件时打印4,并在C++文件中打印100。为什么?我正在使用gcc。 最佳答案 在C中,逗号运算符右侧操作数的结果具有类型和值。在C中,逗号运算符不会产生左值。因此存在左值到右值的转换,导致数组类型衰减为指针类型。所以在C中你得到的是sizeof(char*).的结果在C++中,逗号表达式的结果是左值。没有这样的转换[如在C中],你得到的是sizeof(arr)即100

c++ - sizeof(arr)/sizeof(arr[0]) 是如何工作的?

当我在for循环中寻找数组的大小时,我看到人们写过intarr[10];for(inti=0;isizeof(arr)/sizeof(arr[0])数组的长度如何?它在技术上是如何工作的? 最佳答案 如果你有一个array然后sizeof(array)返回数组占用的字节数。由于每个元素可能占用超过1个字节的空间,因此您必须将结果除以一个元素的大小(sizeof(array[0]))。这为您提供了数组中的元素数量。例子:std::uint32_tarray[10];autosizeOfInt=sizeof(std::uint32_t)

c++ - sizeof(arr)/sizeof(arr[0]) 是如何工作的?

当我在for循环中寻找数组的大小时,我看到人们写过intarr[10];for(inti=0;isizeof(arr)/sizeof(arr[0])数组的长度如何?它在技术上是如何工作的? 最佳答案 如果你有一个array然后sizeof(array)返回数组占用的字节数。由于每个元素可能占用超过1个字节的空间,因此您必须将结果除以一个元素的大小(sizeof(array[0]))。这为您提供了数组中的元素数量。例子:std::uint32_tarray[10];autosizeOfInt=sizeof(std::uint32_t)