文档章节

sizeof容易忽略的细节

laomd
 laomd
发布于 2017/02/23 10:29
字数 279
阅读 0
收藏 0
点赞 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 ⋅ 0

season_01_episode_12_part1

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

板桥 ⋅ 2017/12/22 ⋅ 0

嵌入式开发之C基础学习笔记09--位段,枚举和文件操作

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

吴锦涛 ⋅ 2012/12/16 ⋅ 0

编程修养(一)

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

余二五 ⋅ 2017/11/08 ⋅ 0

10个web设计元素,你不能忽略

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

老枪 ⋅ 2011/03/29 ⋅ 8

form-binder v0.5.0 发布,微型数据绑定和校验框架

客户端和服务器端都需要校验用户输入,同一套校验逻辑最好不要写两遍,可以都定义在服务器端,客户端(浏览器)通过 ajax 方式来复用。 为了有效的支持上述应用场景,这次增强在 FormBinder...

Tu_Minglei ⋅ 2014/10/09 ⋅ 0

java 项目中的文件路径问题(待续)

java 项目中的文件路径问题 java文件路径,很多时候容易忽略的一个小细节问题。在这里我把文件路径做一些总结。 第一种是根据项目本身路径来读取: 在我们使用 new FileInputStream(filePath...

年少爱追梦 ⋅ 2016/06/23 ⋅ 0

Android NDK GPIO操作(pcduino 装Android系统)

开发工具: Eclipse 开发语言: Java和c++ Pcduino跑Android系统让我兴奋了很长时间,也由此幻想了很多有趣的应用。例如 结合Yeelink做远程加电控制;结合微信开放接口与传感器向好友推送信息...

伽罗kapple ⋅ 2014/11/01 ⋅ 0

窥探JVM内存分配和回收的过程

一、环境 JDK 垃圾收集器 是否启用TLAB 通用JVM参数(堆内存分配见下图) + 否 二、说明 三、示例 1. 对象优先分配在 1.1 说明 新对象,优先考虑分配在区域 如果Eden区域没有容纳新对象,进行...

闪电 ⋅ 2016/08/03 ⋅ 0

socket的五大误区

隐患 1.忽略返回状态 第一个隐患很明显,但它是开发新手最容易犯的一个错误。如果您忽略函数的返回状态,当它们失败或部分成功的时候,您也许会迷失。反过来,这可能传播错误,使定位问题的...

nothingfinal ⋅ 2012/06/09 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

win10怎么彻底关闭自动更新

win10自带的更新每天都很多,每一次下载都要占用大量网络,而且安装要等得时间也蛮久的。 工具/原料 Win10 方法/步骤 单击左下角开始菜单点击设置图标进入设置界面 在设置窗口中输入“服务”...

阿K1225 ⋅ 今天 ⋅ 0

Elasticsearch 6.3.0 SQL功能使用案例分享

The best elasticsearch highlevel java rest api-----bboss Elasticsearch 6.3.0 官方新推出的SQL检索插件非常不错,本文一个实际案例来介绍其使用方法。 1.代码中的sql检索 @Testpu...

bboss ⋅ 今天 ⋅ 0

informix数据库在linux中的安装以及用java/c/c++访问

一、安装前准备 安装JDK(略) 到IBM官网上下载informix软件:iif.12.10.FC9DE.linux-x86_64.tar放在某个大家都可以访问的目录比如:/mypkg,并解压到该目录下。 我也放到了百度云和天翼云上...

wangxuwei ⋅ 今天 ⋅ 0

PHP语言系统ZBLOG或许无法重现月光博客的闪耀历史[图]

最近在写博客,希望通过自己努力打造一个优秀的教育类主题博客,名动江湖,但是问题来了,现在写博客还有前途吗?面对强大的自媒体站点围剿,还有信心和可能型吗? 至于程序部分,我选择了P...

原创小博客 ⋅ 今天 ⋅ 0

IntelliJ IDEA 2018.1新特性

工欲善其事必先利其器,如果有一款IDE可以让你更高效地专注于开发以及源码阅读,为什么不试一试? 本文转载自:netty技术内幕 3月27日,jetbrains正式发布期待已久的IntelliJ IDEA 2018.1,再...

Romane ⋅ 今天 ⋅ 0

浅谈设计模式之工厂模式

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻...

佛系程序猿灬 ⋅ 今天 ⋅ 0

Dockerfile基础命令总结

FROM 指定使用的基础base image FROM scratch # 制作base image ,不使用任何基础imageFROM centos # 使用base imageFROM ubuntu:14.04 尽量使用官方的base image,为了安全 LABEL 描述作...

ExtreU ⋅ 昨天 ⋅ 0

存储,对比私有云和公有云的不同

导读 说起公共存储,很难不与后网络公司时代的选择性外包联系起来,但尽管如此,它还是具备着简单和固有的可用性。公共存储的名字听起来也缺乏专有性,很像是把东西直接堆放在那里而不会得到...

问题终结者 ⋅ 昨天 ⋅ 0

C++难点解析之const修饰符

C++难点解析之const修饰符 c++ 相比于其他编程语言,可能是最为难掌握,概念最为复杂的。结合自己平时的C++使用经验,这里将会列举出一些常见的难点并给出相应的解释。 const修饰符 const在c...

jackie8tao ⋅ 昨天 ⋅ 0

聊聊spring cloud netflix的HystrixCommands

序 本文主要研究一下spring cloud netflix的HystrixCommands。 maven <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-clo......

go4it ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部