自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

【編程學(xué)習(xí)進(jìn)階之路】Extern和Export的作用及區(qū)別

開發(fā) 前端
在編程中,變量的聲明通常指的是告訴編譯器一個(gè)變量的存在,但不分配實(shí)際的內(nèi)存空間。而變量的定義則是在聲明的基礎(chǔ)上為變量分配內(nèi)存空間。這兩者的區(qū)別在于是否需要為變量分配存儲(chǔ)空間。

在編程中,變量的聲明和定義是兩個(gè)重要的概念,它們?cè)诓煌闆r下有著不同的作用。本文將探討extern和export關(guān)鍵字的作用,以及它們之間的區(qū)別。

聲明與定義

在編程中,變量的聲明通常指的是告訴編譯器一個(gè)變量的存在,但不分配實(shí)際的內(nèi)存空間。而變量的定義則是在聲明的基礎(chǔ)上為變量分配內(nèi)存空間。這兩者的區(qū)別在于是否需要為變量分配存儲(chǔ)空間。

extern關(guān)鍵字

extern關(guān)鍵字通常用于聲明一個(gè)變量或函數(shù),告訴編譯器該變量或函數(shù)是在其他文件中定義的。這意味著變量的實(shí)際定義存在于其他地方,而當(dāng)前文件只是在這里引用它。例如,如果在一個(gè)C或C++程序中使用extern int a,那么編譯器會(huì)知道變量a是在另一個(gè)文件中定義的。

extern關(guān)鍵字通常用于引用全局變量或函數(shù),以實(shí)現(xiàn)跨文件的共享。這可以使程序更模塊化,減少代碼的重復(fù)編寫。

export關(guān)鍵字(C++中新增)

在C++中,出現(xiàn)了一個(gè)新的關(guān)鍵字export,它與extern有些相似,但用于模板的情況。export關(guān)鍵字用于實(shí)現(xiàn)模板函數(shù)的外部調(diào)用。在模板函數(shù)的實(shí)現(xiàn)時(shí),可以在其前面加上export關(guān)鍵字,這樣其他文件包含相應(yīng)的頭文件后就可以使用該模板。

export的主要作用是將模板的定義與實(shí)現(xiàn)分離,使得模板可以在不同的編譯單元中共享。這提供了更大的靈活性和可維護(hù)性,特別是在大型項(xiàng)目中。

extern "C"的用法

在C語言中,對(duì)于外部函數(shù)的聲明通常使用extern關(guān)鍵字,而C語言不支持extern "C"聲明。在C語言的頭文件中,只能將外部函數(shù)指定為extern類型,而不能使用extern "C"。如果在C文件中包含了extern "C",則會(huì)導(dǎo)致編譯語法錯(cuò)誤。

因此,extern "C"通常用于C++程序或其相關(guān)頭文件中,以便與C語言的函數(shù)進(jìn)行交互,確保函數(shù)的名稱和調(diào)用約定與C語言兼容。

在編程中,extern用于引用在其他文件中定義的變量或函數(shù),而export用于模板函數(shù)的外部調(diào)用,提供了更大的模塊化和可維護(hù)性。同時(shí),extern "C"用于與C語言函數(shù)進(jìn)行交互,確保兼容性。了解這些關(guān)鍵字的作用和用法可以幫助程序員更好地管理和組織代碼,使程序更加清晰和可維護(hù)。

explicit的作用

explicit阻止隱式轉(zhuǎn)換

隱式轉(zhuǎn)換

String s1 = "hello";
//進(jìn)行隱式轉(zhuǎn)換,等價(jià)于
String s1 = String("hello");

explicit阻止隱式轉(zhuǎn)換

class Test1
{
public:
Test1(int n){ num = n }
private:
int num;
}
class Test2
{
public:
explicit Test2(int n){ num = n }
private:
int num;
}
int main()
{
Test1 t1 = 1; //正確,隱式轉(zhuǎn)換
Test2 t2 = 1;//錯(cuò)誤,禁止隱式轉(zhuǎn)換
Test2 t2(1); //正確,可與顯示調(diào)用
}
責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2015-07-28 17:11:00

編程技術(shù)提升

2019-10-24 09:29:13

編程Python程序

2015-07-02 13:32:22

黑客中國黑客

2009-09-02 17:04:35

C# Extern修飾

2023-02-01 09:27:46

2021-07-11 18:04:04

C語言

2013-07-26 10:07:00

OSPF協(xié)議OSPF區(qū)域

2013-01-05 02:11:39

工程師程序員

2010-03-11 15:16:52

Python編程語言

2017-04-14 14:57:03

機(jī)器學(xué)習(xí)學(xué)習(xí)資源

2021-01-13 09:40:26

Linuxexport命令

2011-05-13 14:56:14

autoregisterstatic

2010-07-12 14:16:19

UML活動(dòng)圖

2021-04-26 09:25:10

JavaKafka架構(gòu)

2010-03-17 18:38:53

Java編程語言

2023-11-27 19:35:01

C++extern

2009-06-29 16:24:00

JSP和Servlet

2009-06-30 17:10:28

JSP和Servlet

2009-06-30 14:51:19

JSP和Servlet
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)