精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Include Cpp?還可以這樣?

開發 前端
前兩天突然看見部門有個項目的代碼里通篇全是#include "xxx.cpp",我表示從來沒見過這種寫法,引發了我的一些思考.

[[384761]]

本文轉載自微信公眾號「程序喵大人」,作者程序喵大人  。轉載本文請聯系程序喵大人公眾號。

前兩天突然看見部門有個項目的代碼里通篇全是#include "xxx.cpp",我表示從來沒見過這種寫法,引發了我的一些思考:

問題一:這啥玩意?

C++是一門高深莫測的語言,什么寫法都有,而且#include本質上就是復制粘貼代碼,我也不敢說別人寫的不對,可能開發者是C++大佬,寫了一些我們普通人無法理解的代碼也是正常的。

問題二:整個項目都是這種引用方式,不會導致某一函數重復定義嗎?

為此我查了一些資料,并做了一些測試:

代碼段1:

  1. // file1.cc 
  2. #include <iostream> 
  3.  
  4. using std::cout; 
  5.  
  6.  void ddd() { cout << "ddd \n"; } 

代碼段2:

  1. // file2.cc 
  2. #include "file1.cc" 
  3.  
  4. int main() { 
  5.     ddd(); 
  6.     return 0; 

代碼段3:

  1. // filec.cc 
  2. #include "file1.cc" 
  3.  
  4. void f() { 
  5.     ddd(); 

然后三個源文件一起編譯鏈接:

發現報錯了,的確出現了multiple definition的錯誤,確實一個函數不能有多個定義。我又改了下代碼:

  1. // file1.cc 
  2. #include <iostream> 
  3.  
  4. using std::cout; 
  5.  
  6. inline void ddd() { cout << "ddd \n"; } 

將ddd函數改成了內聯函數,然后三個源文件一起編譯鏈接:

編譯成功且正常輸出。

我將普通函數改成成員函數又測試了一次:

代碼段1:

  1. file1.cc 
  2. #include <iostream> 
  3.  
  4. using std::cout; 
  5.  
  6. struct A { 
  7.     int a_; 
  8.     void func(); 
  9. }; 
  10.  
  11. void A::func() { cout << "file1.cc a " << a_ << "\n"; } 

代碼段2:

  1. // file2.cc 
  2. #include "file1.cc" 
  3.  
  4. int main() { 
  5.     A a; 
  6.     a.func(); 
  7.     return 0; 

代碼段3:

  1. // filec.cc 
  2. #include "file1.cc" 
  3.  
  4. void f() { 
  5.     A a; 
  6.     a.func(); 

然后一起編譯鏈接:

發現成員函數這樣定義也會報錯,也會有multiple definition的錯誤,我又改了一下代碼:

  1. // file1.cc 
  2. #include <iostream> 
  3.  
  4. using std::cout; 
  5.  
  6. struct A { 
  7.     int a_; 
  8.     void func() { cout << "file1.cc a " << a_ << "\n"; } 
  9. }; 

將函數的定義搬運到了類中,編譯鏈接:

 

程序正常運行,熟悉C++的朋友可能都知道原因,類中定義的函數就相當于是內聯函數,所以編譯鏈接不會有問題。

所以得出結論:

  • 內聯函數的定義可以被多個源文件引入(內聯函數到最后其實不是個函數)
  • 類的定義可以被多個源文件引入(這是必須的,要不然編譯器怎么知道類的對象布局)

問題三:貌似平時使用的模板就多數都定義在頭文件中,這個不會導致某一函數重復定義嗎?

直接看三段代碼吧:

代碼段1:

  1. // temp.h 
  2. #include <iostream> 
  3.  
  4. template <typename T> 
  5. struct B { 
  6.     T a; 
  7.     void ff() { std::cout << "temph \n"; } 
  8. }; 

代碼段2:

  1. // filec.cc 
  2. #include "temp.h" 
  3.  
  4. void f() { 
  5.     B<int> a; 
  6.     a.ff(); 

代碼段3:

  1. // file2.cc 
  2. #include "temp.h" 
  3.  
  4. int main() { 
  5.     B<int> a; 
  6.     a.ff(); 
  7.     return 0; 

所有源文件編譯鏈接:

發現編譯成功且正常運行,那如果函數的定義不在類內會怎么樣呢?

  1. // temp.h 
  2. #include <iostream> 
  3.  
  4. template <typename T> 
  5. struct B { 
  6.     T a; 
  7.     void ff(); 
  8. }; 
  9.  
  10. template <typename T> 
  11. void B<T>::ff() { 
  12.     std::cout << "temph \n"

程序編譯鏈接后:

編譯鏈接成功且輸出正常結果。

所以得出結論:編譯器對模板做了特殊處理,不論模板類中函數是否內聯,都可以正常鏈接。

這個結論其實不是我得出的(所以可信),而是gnu文檔(參考資料的最后一個鏈接)寫的,上述代碼只是為了印證結論。

大體意思如下:編譯器對模板做了特殊處理,如果函數不是內聯函數,那可以有兩種處理方式:

  1. 鏈接時隨機選擇一個定義,其它的丟棄掉
  2. 編譯器會把函數的定義單獨提出來,提到單獨一個文件中,對此文件單獨編譯,就不會出現重復定義的問題。

搞定,大家對此還有什么問題,歡迎留言!

參考資料

https://zybuluo.com/uuprince/note/81709

https://stackoverflow.com/questions/15866258/template-class-multiple-definition

https://gcc.gnu.org/onlinedocs/gcc/Template-Instantiation.html

 

責任編輯:武曉燕 來源: 程序喵大人
相關推薦

2022-07-30 23:45:09

內存泄漏檢測工具工具

2021-02-01 13:35:28

微信Python技巧

2023-07-03 16:49:47

5G

2022-05-17 07:26:33

動畫CSS前端

2013-09-18 10:44:01

搜狗輸入法詞語

2012-10-12 10:13:26

eclips代碼編寫Editplus

2020-08-24 07:19:13

主鍵自增數據庫

2019-01-29 10:00:59

GitHub開源搜索

2024-06-13 08:19:08

Controller接口參數

2024-05-17 09:37:26

format屬性Spring

2023-12-11 13:57:00

RFM模型激勵機制

2020-12-28 08:36:30

C語言編程泛型

2020-06-03 10:54:28

戴爾

2024-08-06 09:51:21

SpringHTTPJSON

2018-06-03 09:43:47

iOSAndroid谷歌

2022-09-26 07:32:24

開發接口編程

2018-06-27 14:23:38

機器學習人工智能入門方法

2016-09-29 17:48:32

騰訊云語音質檢珍愛網

2011-06-16 12:08:55

筆記本體驗

2022-04-24 14:13:00

快手互聯網
點贊
收藏

51CTO技術棧公眾號

6080亚洲精品一区二区| 国产精品伦一区二区三级视频| 久久久久久久国产精品| 亚洲激情 欧美| 三上悠亚激情av一区二区三区| 国产精品视频免费看| 亚洲r级在线观看| 久久久国产精品成人免费| 青青草97国产精品麻豆| 日韩一级片网址| 丰满人妻中伦妇伦精品app| 亚洲1卡2卡3卡4卡乱码精品| 成人99免费视频| 国产精品入口免费视| 国产无精乱码一区二区三区| 色综合久久网| 亚洲精品国产福利| 国产三级三级看三级| 18video性欧美19sex高清| 国产精品女同一区二区三区| 精品欧美国产一区二区三区不卡| 亚洲熟妇无码久久精品| 国产一区二区三区久久久久久久久| 中文字幕亚洲综合| 国产人妻人伦精品1国产丝袜| 国产一区二区| 欧美综合久久久| 热99这里只有精品| 曰本三级在线| 国产精品国产三级国产| 免费看成人午夜电影| 亚洲a视频在线观看| 免费成人在线视频观看| 国产91精品青草社区| 精品午夜福利视频| 亚洲色图88| 日韩视频精品在线| 人妻熟人中文字幕一区二区| 九九在线高清精品视频| 亚洲国产精品热久久| 好吊操视频这里只有精品| 日日夜夜亚洲精品| 欧美日韩的一区二区| 91精品无人成人www| 日本成人三级电影| 高潮白浆女日韩av免费看| 国产xxxx振车| 老司机午夜在线视频| 中文乱码免费一区二区| 午夜精品一区二区在线观看| 国产视频第一区| 国产网红主播福利一区二区| 国产一区二区三区高清在线观看 | 久久亚洲欧美| 欧美一级片在线播放| 成年人视频在线免费看| 亚洲永久免费精品| 欧美一区二区影院| 亚洲高清毛片一区二区| 丝袜国产日韩另类美女| 欧美诱惑福利视频| 91午夜精品亚洲一区二区三区| 国产精品久久久一区二区| 97视频在线观看免费高清完整版在线观看| 久青草免费视频| 日韩视频一区二区三区在线播放免费观看| 国内揄拍国内精品| 99热国产在线观看| 视频一区二区国产| 国产精品第8页| 亚洲视频在线观看一区二区| 精品一区二区三区不卡| 亚洲综合一区二区不卡| 欧美一区二区黄片| 久久久精品免费网站| 午夜精品一区二区在线观看的 | 久久久久久免费精品| 日韩黄色a级片| 亚洲第一论坛sis| 亚洲区在线播放| 亚洲欧美另类日本| 最新欧美人z0oozo0| 久久久久久久激情视频| 日韩在线播放中文字幕| 久久精品国产久精国产| 99精彩视频| 嫩草研究院在线观看| 欧美国产日韩精品免费观看| 黄色网址在线免费看| av电影在线免费| 在线观看国产91| 日本中文字幕精品| 猛男gaygay欧美视频| 久久久www成人免费精品张筱雨| 国产一级做a爱免费视频| 亚洲专区免费| 成人在线国产精品| 五月天丁香视频| 中文字幕av不卡| 日本男女交配视频| 日本另类视频| 亚洲成人精品av| 91麻豆精品国产91久久综合| 国产精品mv在线观看| 国产精品久久久久久久久久99| 国产a级免费视频| 久久综合视频网| 中国一级大黄大黄大色毛片| 欧美激情喷水| 日韩精品一区在线观看| 国产一区二区三区四区在线| 影音先锋久久资源网| 91精品久久久久久久久久久久久久| 欧美性猛交 xxxx| 国产精品精品国产色婷婷| 国产一区二区在线视频播放| 欧美国产亚洲精品| 中文字幕日韩欧美在线视频| 国产又黄又爽又色| 国产不卡视频在线观看| 亚洲国产精品视频一区| 亚洲一区资源| 亚洲第一区第一页| 国产1区2区3区4区| 久久91精品久久久久久秒播| 欧美另类一区| 伊人色综合一区二区三区影院视频| 日韩手机在线导航| 99热99这里只有精品| 日本中文字幕一区二区有限公司| 国外成人免费视频| 日韩激情av| 91.com视频| 亚洲AV成人无码精电影在线| 奇米综合一区二区三区精品视频| 久久精品人成| 国产夫妻在线| 亚洲成人av在线| 久草免费在线观看视频| 国产精品一品视频| 日韩精品第1页| 中文成人在线| www.日韩系列| 国产精品乱码久久久| 一区二区中文视频| 17c国产在线| 国产精品99视频| 国产精品欧美一区二区| h网站视频在线观看| 在线视频你懂得一区二区三区| 美女又爽又黄视频毛茸茸| 国产亚洲毛片| 欧美日韩免费观看一区| 3d欧美精品动漫xxxx无尽| 伊人久久久久久久久久| 中文字幕自拍偷拍| 一区在线中文字幕| 永久看看免费大片| 欧美亚韩一区| 久久草视频在线看| 成人勉费视频| 中文字幕日韩在线视频| 国产精品怡红院| 一区二区三区日韩欧美精品| 久久久久国产免费| 日韩天堂av| 奇米精品在线| 日韩av懂色| 欧美高清视频免费观看| 二区视频在线观看| 91丝袜高跟美女视频| 99999精品视频| 欧美偷拍自拍| 91在线观看免费高清| 欧美aaa免费| 日韩高清欧美高清| 中文字幕av影视| 日韩美女视频一区二区| 日本一区二区免费视频| 久久久久国产精品午夜一区| 亚洲精品在线视频观看| 九九99久久精品在免费线bt| 久久男人av资源网站| 麻豆导航在线观看| 337p亚洲精品色噜噜噜| 国产真实夫妇交换视频| 亚洲国产经典视频| 国产精品嫩草69影院| 亚洲专区欧美专区| 永久免费在线看片视频| 亚洲小说图片| 99久久久久国产精品免费| 日韩电影免费观| 欧美精品一区二区免费| 欧洲天堂在线观看| 日韩一区二区三区在线观看| 日韩人妻精品中文字幕| 一区二区三区丝袜| 一区二区三区在线观看免费视频| 国产美女久久久久| 成年人视频在线免费| 欧美搞黄网站| 日韩一区二区三区高清| aiai久久| 91亚洲精品在线| 日韩av福利| 国外成人性视频| 国产乱色在线观看| 一本一道久久a久久精品逆3p | 日韩精品中文字幕视频在线| 97视频免费在线| 色婷婷综合久久久中文一区二区| 在线免费观看亚洲视频| 国产欧美一区二区精品性色超碰 | 欧美激情精品久久久久久免费印度| 九色蝌蚪在线| 亚洲精品aⅴ中文字幕乱码 | 福利一区在线| 日韩av观看网址| 超清av在线| 久久香蕉国产线看观看av| 国产黄在线看| 亚洲欧洲日产国产网站| 人妻一区二区三区四区| 日韩一区二区精品在线观看| 在线免费看av的网站| 色8久久精品久久久久久蜜| 全部毛片永久免费看| 亚洲国产日韩一区二区| 欧美黄色免费观看| 亚洲欧美日韩国产中文在线| 四虎影视一区二区| 国产日韩精品一区二区三区| 在线免费观看成年人视频| 成人av在线播放网站| 国产精品嫩草69影院| 国产不卡视频在线观看| 免费国偷自产拍精品视频| 国产综合久久久久影院| www.久久av.com| 久久99精品网久久| 在线观看av网页| 麻豆久久久久久久| 中文字幕免费高清在线| 精品一区二区国语对白| 色一情一区二区三区| 久久99精品久久久久久久久久久久| 在线黄色免费观看| 美女视频黄频大全不卡视频在线播放 | 成人欧美一区二区三区黑人| 六九午夜精品视频| 国产日本欧美视频| 国产精品亚洲欧美一级在线| 亚洲aa在线观看| 精品欧美视频| 国产精品一区二区三区观看| 久久久久97| 欧美亚洲另类在线一区二区三区 | 亚洲男人的天堂在线播放| 深夜福利视频在线免费观看| 亚洲成人亚洲激情| 天堂资源中文在线| 国产一区二区三区视频免费| 草草影院在线观看| 久久久av网站| av日韩国产| 欧洲精品久久久| 99精品国自产在线| 亚洲自拍欧美另类| 福利在线一区| 欧美一区二区影视| 欧美韩日一区| 国产 欧美 日韩 一区| 日韩五码在线| 欧美日韩亚洲自拍| 国产高清视频一区| 五月婷婷综合在线观看| 国产精品色一区二区三区| 亚洲成人生活片| 偷窥少妇高潮呻吟av久久免费| 青青青国产在线 | 久久视频在线| 日本成人在线不卡| 校园激情久久| 九九热精品国产| 91在线你懂得| 九九精品视频免费| 黄网站色欧美视频| 亚洲综合精品国产一区二区三区| 精品国产一区久久| 91社区在线| 久久久人成影片一区二区三区| 欧美特大特白屁股xxxx| 92裸体在线视频网站| 四虎884aa成人精品最新| 伊人久久大香线蕉成人综合网| 亚洲成人资源| 日韩精品aaa| 久久久高清一区二区三区| 国产精品久久久精品四季影院| 狠狠躁天天躁日日躁欧美| 国产美女精品视频国产| 欧美午夜精品久久久久久浪潮| 亚洲系列在线观看| 亚洲精品99999| www视频在线免费观看 | 国产精品久久久久久久久久辛辛| 久久精品一区二区三区不卡免费视频| 国产精品二区不卡| 欧美三级午夜理伦三级| 成人免费毛片片v| 中文字幕无码日韩专区免费| 一本一道久久a久久精品| 精品久久久久成人码免费动漫| 亚洲天堂av女优| 丁香影院在线| 91亚洲精品一区| 四虎成人av| 密臀av一区二区三区| 成人美女视频在线观看| 91人妻一区二区三区蜜臀| 欧美色大人视频| 噜噜噜噜噜在线视频| 久久久亚洲影院你懂的| 日本免费精品| 热这里只有精品| 老汉av免费一区二区三区 | 亚洲黄页在线观看| 国产日本在线播放| 国产91丝袜在线观看| 91香蕉视频在线播放| 欧美日韩性生活| 91美女视频在线| 国产精品久久久久77777| 国产精品自拍区| 激情视频综合网| 久久久久久电影| 一级成人黄色片| 日韩精品免费在线观看| 成人黄色动漫| 免费国产一区二区| 亚洲在线网站| 国产毛片久久久久久久| 一本一本大道香蕉久在线精品 | 波多野结衣视频网址| 亚洲一级黄色av| 成人免费在线观看视频| 亚欧精品在线| 麻豆久久一区二区| 中文字幕乱码av| 9191精品国产综合久久久久久| 九义人在线观看完整免费版电视剧| 国产女同一区二区| 亚洲91视频| 精品人妻在线视频| 欧美日韩另类在线| 青青草免费在线| 国产成人精品视| 久久五月天小说| 又黄又色的网站| 动漫精品一区二区| 国产永久av在线| 国产精品专区第二| 亚洲大全视频| 日本69式三人交| 色嗨嗨av一区二区三区| 日本精品在线| 国产精品久久精品国产| 日韩一级欧洲| 日韩女同一区二区三区| 欧美一级日韩不卡播放免费| 国精产品一区一区三区mba下载| 国产欧美一区二区三区另类精品| 国产欧美亚洲一区| av手机在线播放| 欧美一级久久久| 英国三级经典在线观看| 亚洲精品在线免费| 成人综合婷婷国产精品久久蜜臀| 成人精品免费在线观看| 中文字幕日韩在线播放| 亚洲精品观看| 欧美三级午夜理伦三级| 日韩理论片在线| 亚洲av毛片成人精品| 国产精自产拍久久久久久蜜| 亚洲激情专区| 网爆门在线观看| 亚洲第一区中文99精品| 成人国产精品| av免费观看大全| 国产精品久久久久久久蜜臀| 国精品人妻无码一区二区三区喝尿 | 欧美日韩精品免费在线观看视频| 韩国视频一区二区| 亚洲乱码国产乱码精品| 欧美另类在线观看| 精品大片一区二区| 国产婷婷在线观看| 欧美精品欧美精品系列|