设为首页 加入收藏

TOP

C++sizeof使用规则及陷阱分析(1)
2014-11-23 21:26:56 】 浏览:4562
Tags:sizeof 使用 规则 陷阱 分析

  一、什么是sizeof


  首先看一下sizeof在msdn上的定义:


  The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregate types). This keyword returns a value of type size_t.


  看到return这个字眼,是不是想到了函数?错了,sizeof不是一个函数,你见过给一个函数传参数,而不加括号的吗?sizeof可以,所以sizeof不是函数。网上有人说sizeof是一元操作符,但是我并不这么认为,因为sizeof更像一个特殊的宏,它是在编译阶段求值的。举个例子:


  1 cout<


  2 cout<


  3


  在编译阶段已经被翻译为:


  1 cout<<4<


  2 cout<<1<


  这里有个陷阱,看下面的程序:


  1 int a = 0;


  2 cout<


  3 cout<


  输出为什么是4,0而不是期望中的4,3???就在于sizeof在编译阶段处理的特性。由于sizeof不能被编译成机器码,所以sizeof作用范围内,也就是()里面的内容也不能被编译,而是被替换成类型。=操作符返回左操作数的类型,所以a=3相当于int,而代码也被替换为:


  int a = 0;


  cout<<4<


  cout<


  1 cout << sizeof("abcd") << endl;//5


  "abcd"返回是字符串类型


  所以,sizeof是不可能支持链式表达式的,这也是和一元操作符不一样的地方。


  结论:不要把sizeof当成函数,也不要看作一元操作符,把他当成一个特殊的编译预处理。


  二、sizeof的用法


  sizeof有两种用法:


  (1)sizeof(object)或sizeof object


  也就是对对象使用sizeof,也可以写成sizeof object 的形式。例如:


  (2)sizeof(typename)


  也就是对类型使用sizeof,注意这种情况下写成sizeof typename是非法的。下面举几个例子说明一下:


  1 int i = 2;


  2 cout<


  结论:不论sizeof要对谁取值,最好都加上()。


  三、基本数据类型的sizeof


  (1)C++内置数据类型


  32位C++中的基本数据类型,


  bool char short int(short) int long int(long) float double long double


  sizeof 1 1 2 4 4 4 8 10


  char,short int(short),int,long int(long),float,double, long double大小分别是:1,2,4,4,4,8, 10。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C++sizeof使用规则及陷阱分析(2) 下一篇汽车加油问题之贪心算法

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目