sizeof

一元运算符,它产生操作数的字节大小,可以是表达式或类型。如果操作数是表达式,则不对其进行求值。大小是 std::size_t 类型的常量表达式。

如果操作数是类型,则必须用括号括起来。

  • sizeof 应用于函数类型是违法的。
  • sizeof 应用于不完整类型是非法的,包括 void
  • 如果 sizeof 应用于参考类型 T&T&&,则相当于 sizeof(T)
  • sizeof 应用于类类型时,它会产生该类型的完整对象中的字节数,包括中间或末尾的任何填充字节。因此,sizeof 表达式的值永远不能为 0.有关详细信息,请参阅对象类型的布局
  • charsigned charunsigned char 类型的大小为 1.相反,一个字节被定义为存储 char 对象所需的内存量。它不一定意味着 8 位,因为一些系统具有超过 8 位的 char 对象。

如果 expr 是一个表达式,sizeof( expr ) 相当于 sizeof(T),其中 Texpr 的类型*。*

int a[100];
std::cout << "The number of bytes in `a` is: " << sizeof a;
memset(a, 0, sizeof a); // zeroes out the array

Version >= C++ 11

sizeof... 运算符产生参数包中的元素数。

template <class... T>
void f(T&&...) {
    std::cout << "f was called with " << sizeof...(T) << " arguments\n";
}