sizeof 运算符

来自cppreference.com
< cpp‎ | language
 
 
 
表达式
概述
值类别(左值 lvalue 、右值 rvalue 、亡值 xvalue )
求值顺序(序列点)
常量表达式
不求值表达式
初等表达式
lambda 表达式(C++11)
字面量
整数字面量
浮点字面量
布尔字面量
字符字面量,包含转义序列
字符串字面量
空指针字面量(C++11)
用户定义字面量(C++11)
运算符
赋值运算符a=b, a+=b, a-=b, a*=b, a/=b, a%=b, a&=b, a|=b, a^=b, a<<=b, a>>=b
自增与自减++a, --a, a++, a--
算术运算符+a, -a, a+b, a-b, a*b, a/b, a%b, ~a, a&b, a|b, a^b, a<<b, a>>b
逻辑运算符a||b, a&&b, !a
比较运算符a==b, a!=b, a<b, a>b, a<=b, a>=b, a<=>b(C++20)
成员访问运算符a[b], *a, &a, a->b, a.b, a->*b, a.*b
其他运算符a(...), a,b, a?b:c
运算符的替代表示
优先级和结合性
折叠表达式(C++17)
new 表达式
delete 表达式
throw 表达式
alignof
sizeof
sizeof...(C++11)
typeid
noexcept(C++11)
运算符重载
类型转换
隐式转换
const_cast
static_cast
reinterpret_cast
dynamic_cast
显式转换 (T)a, T(a)
用户定义转换
 

查询对象或类型的大小

在需要知道对象的实际大小时使用。

目录

[编辑] 语法

sizeof( 类型 ) (1)
sizeof 表达式 (2)

两个版本都返回一个 std::size_t 类型的常量。

[编辑] 解释

1) 返回 类型对象表示的字节数。
2) 返回当 表达式 求值时所返回的类型的对象表示的字节数。

[编辑] 注解

依赖于计算机架构,字节可能具有八个或更多位,精确的位数记录于 CHAR_BIT 中。

sizeof(char)sizeof(signed char)sizeof(unsigned char) 总是返回 1

不能对函数类型、不完整类型或位域泛左值使用 sizeof。

当应用于引用类型时,其结果是被引用类型的大小。

当应用于类类型时,其结果是该类的对象的大小与这种对象放入数组时所需的额外填充的大小的总和。

当应用于空类时,总是返回 1。

当应用于某个表达式时,sizeof 并不对表达式进行求值,并且即便表达式所代表的是某个多态对象,其结果也是该表达式的静态类型的大小。不进行左值向右值、数组向指针和函数向指针转换。不过,其在形式上对纯右值实参实施临时对象的实体化: sizeof 确定其结果对象的大小。 (C++17 起)

[编辑] 关键字

sizeof

[编辑] 示例

本示例的输出对应于具有 64 位指针和 32 位 int 的系统。

#include <iostream>
 
struct Empty {};
struct Base { int a; };
struct Derived : Base { int b; };
struct Bit { unsigned bit: 1; };
 
int main()
{
    Empty e;
    Derived d;
    Base& b = d;
    Bit bit;
    int a[10];
    std::cout << "size of empty class: "              << sizeof e          << '\n'
              << "size of pointer : "                 << sizeof &e         << '\n'
//            << "size of function: "                 << sizeof(void())    << '\n'  // 错误
//            << "size of incomplete type: "          << sizeof(int[])     << '\n'  // 错误
//            << "size of bit field: "                << sizeof bit.bit    << '\n'  // 错误
              << "size of array of 10 int: "          << sizeof(int[10])   << '\n'
              << "size of array of 10 int (2): "      << sizeof a          << '\n'
              << "length of array of 10 int: "        << ((sizeof a) / (sizeof *a)) << '\n'
              << "length of array of 10 int (2): "    << ((sizeof a) / (sizeof a[0])) << '\n'
              << "size of the Derived: "              << sizeof d          << '\n'
              << "size of the Derived through Base: " << sizeof b          << '\n';
 
}

可能的输出:

size of empty class: 1
size of pointer : 8
size of array of 10 int: 40
size of array of 10 int (2): 40
length of array of 10 int: 10
length of array of 10 int (2): 10
size of the Derived: 8
size of the Derived through Base: 4

[编辑] 参阅

sizeofC 文档