《深入理解C++11:C++ 11新特性解析与应用》——2.8 非静态成员的sizeof-阿里云开发者社区

开发者社区> 华章计算机> 正文

《深入理解C++11:C++ 11新特性解析与应用》——2.8 非静态成员的sizeof

简介: 本节书摘来自华章计算机《深入理解C++11:C++ 11新特性解析与应用》一书中的第2章,第2.8节,作者 IBM XL编译器中国开发团队,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
+关注继续查看

2.8 非静态成员的sizeof

类别:部分人

从C语言被发明开始,sizeof就是一个运算符,也是C语言中除了加减乘除以外为数不多的特殊运算符之一。而在C++引入类(class)类型之后,sizeof的定义也随之进行了拓展。不过在C++98标准中,对非静态成员变量使用sizeof是不能够通过编译的。我们可以看看下面的例子,如代码清单2-18所示。

image
image

注意最后一个sizeof操作。在C++11中,对非静态成员变量使用sizeof操作是合法的。而在C++98中,只有静态成员,或者对象的实例才能对其成员进行sizeof操作。因此如果读者只有一个支持C++98标准的编译器,在没有定义类实例的时候,要获得类成员的大小,我们通常会采用以下的代码:

sizeof(((People*)0)->hand);

这里我们强制转换0为一个People类的指针,继而通过指针的解引用获得其成员变量,并用sizeof求得该成员变量的大小。而在C++11中,我们无需这样的技巧,因为sizeof可以作用的表达式包括了类成员表达式。

sizeof(People::hand);

可以看到,无论从代码的可读性还是编写的便利性,C++11的规则都比强制指针转换的方案更胜一筹。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
C#解析json文件的方法
C# 解析 json   JSON(全称为JavaScript Object Notation) 是一种轻量级的数据交换格式。它是基于JavaScript语法标准的一个子集。 JSON采用完全独立于语言的文本格式,可以很容易在各种网络、平台和程序之间传输。
1357 0
第7周-任务1-静态数据成员和静态成员函数
【题目】含有静态数据成员和成员函数的Time类:类中所有的对象共有的数据 class Time { public: Time(int=0,int=0,int=0); void show_time( );//根据is_24和from0,输出适合形式-20:23:5/8:23:5 pm/08:23:05 pm voidadd_seconds(int);
789 0
降低 80% 的读写响应延迟!我们测评了 etcd 3.4 新特性(内含读写发展史)
作者 | 陈洁(墨封)  阿里云开发工程师 导读:etcd 作为 K8s 集群中的存储组件,读写性能方面会受到很多压力,而 etcd 3.4 中的新特性将有效缓解压力,本文将从 etcd 数据读写机制的发展历史着手,深入解读 etcd 3.4 新特性。
1397 0
常见设计模式解析和实现(C++)Adapt模式
作用:将一个类的接口转换成客户希望的另一个接口。Adapt模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。     UML示意图 1)      采用继承原有接口类的方式   2)采用组合原有接口类的方式   解析: Adapt模式其实就是把完成同样一个功能但是接口不能兼容的类桥接在一起使之可以在一起工作,这个模式使得复用旧的接口成为可能。
746 0
NetBeans 6.5 M1受称赞的新特性
[b][align=center]NetBeans 6.5 M1受称赞的新特性[/align][/b]最近NetBeans 6.5 M1发布了,其最值得赞赏的特性如下:1)支持PHP:修正了前期支持PHP的很多BUG。
655 0
10059
文章
0
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载