文档章节

sizeof容易忽略的细节

laomd
 laomd
发布于 2017/02/23 10:29
字数 279
阅读 0
收藏 0
  1. sizeof可以对函数调用求值,结果为函数返回值类型的大小,函数并不会被调用,因为sizeof只是提取算子的数据类型,并不会执行算子。我们来看一个完整的例子:
char foo()
{
    printf("foo()has been called.\n");
    return 'a';
}
int main()
{
    size_t sz = sizeof(foo());
    //foo()的返回值类型为char,所以sz=sizeof(char),foo()并不会被调用
    printf("sizeof(foo())=%d\n",sz);
    return 0;
}

​​​​​​

 特别地,如果函数返回值为void,则sizeof的值为sizeof(void)== 1,注意不是0;

ISO C++标准规定,函数、以及位域(bit-field)成员不能被计算sizeof值,即下面这些写法都是错误的:

int foo2(){}
sizeof(foo2);//error
struct S
{
unsigned int f1:1;
unsigned int f2:5;
unsigned int f3:12;
};
sizeof(S::f1);//error

3.sizeof计算时不涉及对内存空间的访问,仅仅提取算子的数据类型。

string a = "test";
cout << sizeof(a.at(1 << 100000)) << endl;

假设sizeof访问了内存,由于1 << 100000超出了a的范围,at函数理应抛出out_of_range异常,但现在程序完美运行,故假设不成立.

© 著作权归作者所有

共有 人打赏支持
上一篇: kmp算法
下一篇: 赢者树入门
laomd
粉丝 0
博文 31
码字总数 12000
作品 0
广州
私信 提问
sizeof的用法细节

sizeof的用法 sizeof的结果是预编译时候的结果。也就是说编译时候就知道了他的结果。这样就可以用sizeof来定义数组了 返回值是size_t 也就是typedef unsigned int sizeof 的操作对象可以是一...

晨曦之光
2012/04/13
171
0
season_01_episode_12_part1

底层编程 Go语言的设计包含了诸多安全策略,限制了可能导致程序运行出现错误的用法。编译时类型 检查检查可以发现大多数类型不匹配的操作,例如两个字符串做减法的错误。字符串、 map、slice...

板桥
2017/12/22
0
0
嵌入式开发之C基础学习笔记09--位段,枚举和文件操作

位段(仅作理解) 位段(bit-field):访问字节中到位到内设机制,可以访问单个未。这是C语言访问二进制位到两种方式到一种(另一种方式是位运算) 1)特点: .内存特别紧张时,可以把若干BOO...

吴锦涛
2012/12/16
0
0
centos下MySQL5.6的修改字符集编码为UTF8(解决中文乱码问题)

在平时部署过程中,容易忽略对centos下安装mysql数据库的字符集编码修改,因在windows版本安装过程中会有一项选择字符集选项。而针对cnetos下容易忽略字符集设定,偶尔会造成部分字符乱码。相...

amosguo
2017/01/05
1
0
编程修养(一)

什么是好的程序员?是不是懂得很多技术细节?还是懂底层编程?还是编程速度比较快?我觉得都不是。对于一些技术细节来说和底层的技术,只要看帮助,查资料就能找到,对于速度快,只要编得多也...

余二五
2017/11/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

一个本科学生对Linux的认知

一个本科学生对Linux的认知 我是一名大三的普通一本大学的软件工程的一名学生,学校开设了一些关于系统开发的课程,纸上得来终觉浅,学校的课程课时较短,想要在56个课时之内学会一些公司需要...

linuxCool
22分钟前
0
0
CentOS 安装Tomcat

Tomcat 介绍 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。 Java 程序写的网站用tomcat+jdk来运...

野雪球
37分钟前
0
0
OSChina 周四乱弹 —— 每天都迟到是种什么样的体验

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @开源中国首席机器人 :《Too Good At Goodbyes (Acoustic) - Sam Smith - 单曲》 《Too Good At Goodbyes (Acoustic) - Sam Smith - 单曲》 ...

小小编辑
41分钟前
213
9
jquery通过id显示隐藏

var $div3 = $('#div3'); 显示 $div3.show(); 隐藏 $div3.hide();

yan_liu
今天
3
0
《乱世佳人》读书笔记及相关感悟3900字

《乱世佳人》读书笔记及相关感悟3900字: 之前一直听「荔枝」,后来不知怎的转向了「喜马拉雅」,一听就是三年。上班的时候听房产,买房了以后听装修,兴之所至时听旅行,分手后听亲密关系,...

原创小博客
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部