c++ - c++中sizeof运算符是如何实现的?

标签 c++ sizeof

谁能给我指出 C++ 中 sizeof 运算符的实现以及关于它的实现的一些描述。

sizeof 是不能重载的运算符之一。

所以这意味着我们不能改变它的默认行为?

最佳答案

sizeof 在 C++ 中不是真正的运算符。它只是插入一个等于参数大小的常量的特殊语法。 sizeof 不需要或没有任何运行时支持。

编辑:你想知道如何通过定义来确定类/结构的大小吗?这方面的规则是 ABI 的一部分。 ,而编译器只是实现它们。基本上规则包括

  1. 基本类型的大小和对齐定义;
  2. 各种指针的结构、大小和对齐方式;
  3. 在结构中打包字段的规则;
  4. 关于虚拟表相关内容的规则(更深奥)。

但是,ABI 是特定于平台的,并且通常是特定于供应商的,即在 x86 和(例如)IA64 上,下面的 A 的大小会有所不同,因为 IA64 不允许未对齐的数据访问。

struct A
{
    char i ;
    int  j ;
} ;

assert (sizeof (A) == 5)  ; // x86, MSVC #pragma pack(1)
assert (sizeof (A) == 8)  ; // x86, MSVC default
assert (sizeof (A) == 16) ; // IA64

关于c++ - c++中sizeof运算符是如何实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/718896/

相关文章:

c++ - 可变参数结构体臃肿,在结构体末尾添加了额外的填充

c++ - 为什么 lambda 的大小为 1 个字节?

C++ 如何格式化包含可变整数的文本行,使其在给定宽度内右对齐?

c++ - 获取 boost::asio::async_read 读取的字节数

c++ - 我们必须删除 QUdpSocket 吗?

c - Solaris sparc 和 Solaris x86 之间的结构大小差异

c++ - 避免在 vs2010 中重建的最佳实践

c++ - 自动/静态内存分配

c - 数组长度...使用 sizeof 运算符时的不同输出

c++ - 64 位机器上的 sizeof(int) 应该是多少?