日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

空结构体和空类

發布時間:2024/4/11 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 空结构体和空类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天看到一片博客說面試被問空結構體大小的問題,發現這個問題以前還真沒想過。于是自己試了一把,并在網上找了些資料總結如下:

  • 空結構體,先上代碼
1 2 3 4 5 6 7 8 9 10 11 #include<stdio.h> 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++程序處理。

  • 空類,先上代碼
1 2 3 4 5 6 7 8 9 10 #include<iostream> using?namespace?std; class?empty{}a; int?main() { ???????cout<<sizeof(a)<<endl; ???????return?0; }

?

以上代碼在g++和vs下編譯運行結果都是1;

???????? 那么空類的大小為什么是1呢,上網查了一下,主流觀點認為類的實例化要求每個實例在內存中都有獨一無二的地址,所以編譯器給空類定義大小為1,這樣該類的不同實例就有了不同地址。

  • 為什么要使用空結構體和空類

????????? 研究空結構體和空類絕不僅僅是為了解決其大小個問題,當然如果你認為這個問題很有意思我也沒辦法。目前除了查到空結構體和空類有占位的作用還沒查到有別的用途。也就是在代碼未成型之前,保證能編譯通過的前提下,先寫出一個代碼架構來,這個時候空結構,空類還有空函數能起到占位的作用。

總結

以上是生活随笔為你收集整理的空结构体和空类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。