sizeof操作符

sizeof操作符返回的是表达式或者类型名的大小,单位是字节(bytes),是右结合的。 sizeof的结果是一个常量表达式,类型是size_t。有两种形式:

  • sizeof (type)
  • sizeof expr

记住,sizeof不寻常之处在于,它不会去解析操作数(not evaluate its operand)。

Sales_data data, *p;
sizeof(Sales_data); // 容纳一个Sales_data类型对象的大小
sizeof data; // 结果和上面相等
sizeof p; // 一个指针大小
sizeof *p; // p指向对象的大小;即sizeof(Sales_data)

我们来看看sizeof *p。首先,因为sizeof是右结合的,优先级和*相等;因此等价于sizeof (*p)

一些值得注意的地方总结:

  • sizeof char的大小始终是1
  • sizeof一个引用即该引用对象类型的大小
  • sizeof一个指针返回容纳该指针的大小
  • sizeof一个指针的解引用,返回指针指向对象类型的大小;指针可以不是合法的
  • sizeof一个数组,返回整个数组的大小;注意,这时数组不会转为指针
  • sizeof一个字符串或者vector,返回的是其固定部分大小。
string s = "hello world";
cout << sizeof(s); // 返回的是string这种数据结构的size,不是其长度