sizeof运算符 (主要复习 sizeof,带一下C++11的特性)
sizeof 运算符返回一条表达式或一个类型名字所占的字节数。 sizeof运算符满足右结合律,其所得的值是一个size_t 类型(unsigned int)的常量表达式。
运算符的运算对象有两种形式:
sizeof (type)
sizeof expr
在第二种形式中,sizeof返回的是表达式结果类型的大小。与从不同的一点是,sizeof并不实际计算其运算对象的值:
Sales_data data, *p;
sizeof(Sales_data); //存储Sales_data类型的对象所占的空间大小
sizeof data; //data 的类型的大小,即sizeof(Sales_data)
sizeof p; //指针所占的空间大小
sizeof *p; //p 所指类型的空间大小,即sizeof(Sales_data)
sizeof data.revenue; //Sales_data的revenue 成员对应类型的大小
sizeof Sales_data::revenue; //另一种获取 revenue大小的方式
在sizeof的运算对象中解个无效指针仍然是一种安全的行为,因为指针实际上并没有被真正使用。
如上述代码最后一句,C++11新标准允许我们使用作用域运算符来获取类成员的大小。
通常情况下只有通过类的对象才能访问到类的成员,但是sizeof 运算符无须我们提供一个具体的对象,因为要想知道类成员的大小无须真的获取该成员。
sizeof 运算符的结果部分地依赖于其作用的类型:
- 对 char或者类型为char 的表达式执行sizeof 运算,结果得1。
- 对引用类型执行 sizeof运算得到被引用对象所占空间的大小。
- 对指针执行 sizeof运算得到指针本身所占空间的大小。 (指针本身大小)
对解引用指针执行 sizeof 运算得到指针指向的对象所占空间的大小,指针不需要有效。
- 对数组执行 sizeof运算得到整个数组所占空间的大小,等价于对数组中所有的元素各执行一次 sizeof运算并将所得结果求和。 注意,sizeof运算不会把数组转换成指针来处理。
对 string 对象或vector对象执行sizeof运算 只返回该类型固定部分的大小,不会计算对象中的元素占用了多少空间 。
上述第六条如下所示:
vector<int> arr(10); //包含10个元素
for(auto i = arr.begin(); i != arr.end() - 5; i++)
*i = 1;
cout << sizeof arr;
结果为:
6
来源:CSDN
作者:花 梦
链接:https://blog.csdn.net/weixin_42100963/article/details/103358754