sizeof
一元运算符,它产生操作数的字节大小,可以是表达式或类型。如果操作数是表达式,则不对其进行求值。大小是 std::size_t 类型的常量表达式。
如果操作数是类型,则必须用括号括起来。
- 将
sizeof应用于函数类型是违法的。 - 将
sizeof应用于不完整类型是非法的,包括void。 - 如果 sizeof 应用于参考类型
T&或T&&,则相当于sizeof(T)。 - 当
sizeof应用于类类型时,它会产生该类型的完整对象中的字节数,包括中间或末尾的任何填充字节。因此,sizeof表达式的值永远不能为 0.有关详细信息,请参阅对象类型的布局 。 char,signed char和unsigned char类型的大小为 1.相反,一个字节被定义为存储char对象所需的内存量。它不一定意味着 8 位,因为一些系统具有超过 8 位的char对象。
如果 expr 是一个表达式,sizeof( expr ) 相当于 sizeof(T),其中 T 是 expr 的类型*。*
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";
}