文档章节

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异常,但现在程序完美运行,故假设不成立.

© 著作权归作者所有

共有 人打赏支持
laomd
粉丝 0
博文 31
码字总数 12000
作品 0
广州
sizeof的用法细节

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

晨曦之光
2012/04/13
149
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
编程修养(一)

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

余二五
2017/11/08
0
0
10个web设计元素,你不能忽略

当谈到设计和创建网站时,似乎从来都感觉不够快。考虑到快节奏,很多小的细节经常会脱离设计过程。虽然这些细节可能微不足道,但是可能将网站从漂亮带到真正的优秀。 这些细节往往容易错过,...

老枪
2011/03/29
2.2K
8

没有更多内容

加载失败,请刷新页面

加载更多

Kali Linux Docker 練習

docker pull kalilinux/kali-linux-docker docker run -t -i kalilinux/kali-linux-docker /bin/bash apt-get update apt-get install htop apt-get install nmap apt-get install wpscan ap......

BaiyuanLab
27分钟前
0
0
通俗大白话来理解TCP协议的三次握手和四次分手

最近在恶补计算机网络方面的知识,之前对于TCP的三次握手和四次分手也是模模糊糊,对于其中的细节更是浑然不知,最近看了很多这方面的知识,也在系统的学习计算机网络,加深自己的CS功底,就...

onedotdot
33分钟前
1
0
TiDB 在爱奇艺的应用及实践

爱奇艺,中国高品质视频娱乐服务提供者,2010 年 4 月 22 日正式上线,推崇品质、青春、时尚的品牌内涵如今已深入人心,网罗了全球广大的年轻用户群体,积极推动产品、技术、内容、营销等全方...

TiDB
37分钟前
0
0
Web系统大规模并发:电商秒杀与抢购

一、大规模并发带来的挑战 在过去的工作中,我曾经面对过5w每秒的高并发秒杀功能,在这个过程中,整个Web系统遇到了很多的问题和挑战。如果Web系统不做针对性的优化,会轻而易举地陷入到异常...

xtof
今天
3
0
代码质量管理平台-sonarqube

在工作中,往往开发的时候会不怎么注重代码质量的人很多,存在着很多的漏洞和隐患等问题,sonarqube可以进行代码质量的审核,而且十分的残酷。。。。。接下来我们说下怎么安装 进入官网下载:...

落叶清风
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部