博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
空结构体和空类
阅读量:5255 次
发布时间:2019-06-14

本文共 786 字,大约阅读时间需要 2 分钟。

        今天看到一片博客说面试被问空结构体大小的问题,发现这个问题以前还真没想过。于是自己试了一把,并在网上找了些资料总结如下:

  • 空结构体,先上代码
#include
typedef empty{}a;int main(){printf(“%d”,sizeof(a));}

以上代码如果采用gcc编译结果是0;采用g++结果是1;vs2008下如果文件名后缀为.c出现编译错误:C 要求一个结构或联合至少有一个成员;文件名后缀为.cpp能通过编译输出结果是1.

ps:这里发现一个现象,vs下采用不同文件名后缀会调用不同的编译器。这和GNU中的gcc、g++编译器差不多,如果后缀是.c,gcc都当做c程序处理,g++当做c++程序处理。如果后缀是.cpp,gcc和g++都当做c++程序处理。

  • 空类,先上代码
#include
using namespace std;class empty{}a;int main(){ cout<
<

 

以上代码在g++和vs下编译运行结果都是1;

         那么空类的大小为什么是1呢,上网查了一下,主流观点认为类的实例化要求每个实例在内存中都有独一无二的地址,所以编译器给空类定义大小为1,这样该类的不同实例就有了不同地址。

  • 为什么要使用空结构体和空类

          研究空结构体和空类绝不仅仅是为了解决其大小个问题,当然如果你认为这个问题很有意思我也没办法。目前除了查到空结构体和空类有占位的作用还没查到有别的用途。也就是在代码未成型之前,保证能编译通过的前提下,先写出一个代码架构来,这个时候空结构,空类还有空函数能起到占位的作用。

转载于:https://www.cnblogs.com/bo083/archive/2011/09/01/2162357.html

你可能感兴趣的文章
如何设置映射网络驱动器的具体步骤和方法
查看>>
ASP.NET WebApi 基于OAuth2.0实现Token签名认证
查看>>
283. Move Zeroes把零放在最后面
查看>>
Visual Studio Code 打开.py代码报Linter pylint is not installed解决办法
查看>>
Python 数据类型
查看>>
S5PV210根文件系统的制作(一)
查看>>
centos下同时启动多个tomcat
查看>>
slab分配器
查看>>
数据清洗
查看>>
【读书笔记】C#高级编程 第三章 对象和类型
查看>>
针对sl的ICSharpCode.SharpZipLib,只保留zip,gzip的流压缩、解压缩功能
查看>>
【转】代码中特殊的注释技术——TODO、FIXME和XXX的用处
查看>>
【SVM】libsvm-python
查看>>
C++循环单链表删除连续相邻重复值
查看>>
Jmeter接口压力测试,Java.net.BindException: Address already in use: connect
查看>>
ASP.NET使网页弹出窗口不再困难
查看>>
Leetcode Balanced Binary Tree
查看>>
Leetcode 92. Reverse Linked List II
查看>>
windown快速安装xgboost
查看>>
Linux上安装Libssh2
查看>>