sizeof

#include <iostream>
using std::cout; using std::endl;

#include <cstddef>
using std::size_t;

int ia[] = {0,1,2,3,4,5,6,7,8,9};

int main()
{
#ifdef CONSTEXPR_VARS
   // sizeof(ia)/sizeof(*ia) returns the number of elements in ia
   constexpr size_t sz = sizeof(ia)/sizeof(*ia);
#else
   const     size_t sz = sizeof(ia)/sizeof(*ia);
#endif

   int arr2[sz];  // ok sizeof returns a constant expression 

   cout << "ia size: " << sz << endl;

   return 0;
}

 

 

sizeof运算符返回一条表达式或一个类型名字所占的字节数。满足右结合律,返回类型size_t的常量表达式

两种形式:

1.sizeof (type)

2.sizeof expr //返回表达式结果类型大小

sizeof并不实际计算其运算对象的值

class Sales_data

{

public:

int revenue();

private:

string  isbn;

double price;

}

Sales_data data,*p;

sizeof(Sales_data);//存储Sales_data类型的对象所占的空间大小

sizeof data   //data 的类型的大小,即sizeof(Sales_data)

sizeof p;//指针所占的空间大小

sizeof *p //p所指类型的空间大小,即sizeof(Sales_data)

     首先因为sizeof满足右结合律且与*运算符的优先级一样,故等价于 sizeof (*p),,其次因为sizeof不会实际求运算对象的值,故即使p是一个无效的指针(未初始化)也不会影响什么。在sizeof的运算对象中解引用一个无效的指针仍然是一种安全的行为,因为指针实际上没有被真正的使用。sizeof不需要真正的解引用指针也能知道它所指对象的类型。

sizeof data.revenue  //Sales_data的revenue成员对应类型的大小

sizeof Sales_data::revenue //另一种获取revenue大小的方式

sizeof运算符的结果部分依赖于其作用的类型

1.对char或者类型为char的表达式结果为1

2.对引用类型得到引用对象所占空间的大小

3对指针得到指针本身所占空间的大小

4对解引用得到指针所指向的对象所占空间的大小,指针不需要有效

5 对数组得到整个数组所占空间的大小,登家园对数组中所有元素个执行一次sizeof运算,并将所得求和。注意:sizeof不会讲数组转化为指针来处理

6对string对象或vector对象执行sizeof运算只返回类型固定部分的大小,不会计算对象中的元素占用了多少空间。

sizeof(ia)/sizeof(*ia)//返回ia的元素个数

constexpr size_t sz=sizeof(ia)/sizeof(*ia)

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值