C++ 中的 sizeof 运算符

sizeof 运算符语法:

  • sizeof (type)
  • sizeof (expr)
  • sizeof expr

sizeof 运算符返回一条表达式或一个类型名字所占的字节数,其返回值是 size_t 类型的常量表达式。


sizeof 运算符对其作用的类型的依赖:

  • 对 char 或者类型为 char 的表达式执行 sizeof 运算,结果是1。
  • 对引用类型执行 sizeof 运算得到被引用对象所占空间的大小。
  • 对指针执行 sizeof 运算得到指针本身所占空间的大小。
  • 对解引用指针执行 sizeof 运算得到指针指向的对象所占空间的大小,指针不需要有效
  • 对数组执行 sizeof 运算得到整个数组所占空间的大小,等价于对数组中所有的元素各执行一次 sizeof 运算并将所得结果求和。注意, sizeof 运算不会把数组转换成指针来处理。
  • 对 string 对象或者 vector 对象执行 sizeof 运算只返回该类型固定部分的大小,不会计算对象中的元素占了多少空间。
  • sizeof 仅仅是一个编译期的行为,对于计算表达式的时候,只会取其类型,而不会实际的运算表达式,例如:int i = 1; sizeof ++i; ,在执行完 sizeof 运算后输出 i ,得到的值仍然是 1。

测试代码如下:

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    
    
    int i = 1;
    int &r = i;
    int *p = &i;
    int arr[10] = {
    
    };
    vector<int> v;

    cout << "sizeof(char): " << sizeof(char) << endl;        // 1
    cout << "sizeof (r): " << sizeof(r) << endl;             // 4
    cout << "sizeof (p): " << sizeof(p) << endl;             // 8 (amd64)
    cout << "sizeof (*p + 10): " << sizeof(*p + 10) << endl; // 4
    cout << "sizeof (arr): " << sizeof(arr) << endl;         // 40
    cout << "sizeof (v): " << sizeof(v) << endl;             // 24
    cout << "sizeof ++i: " << sizeof ++i << endl;            // 4
    cout << "i: " << i << endl;                              // 1
    return 0; 
}

参考资料:《C++ Prime》

猜你喜欢

转载自blog.csdn.net/qq_21746331/article/details/115044927