歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

C++ 聲明與定義的區別

在C++的使用過程中,經常聽到變量的定義、聲明,也經常出現兩者定義隨意混用的情況,其實兩者的差別還是比較大的。

兩個術語的英語定義為:

Declaring is like telling the machine that you want say for example, the variable "x" to exist, you can also set it to something.

Defining a variable is setting it to something.

翻譯過來就是,聲明,其實就是描述一個元素是有什麼構成的; 定義,其實就是在內存中劃分出一個區域且用符號關聯起來;

或許這還不能讓你徹底明白,下面舉個例子:

class ClassA
{
  //添加數據成員...
  //添加成員函數...
};

 

很明顯,上述代碼僅告訴編譯器有自定義類型ClassA,不會占用內存,編譯器僅對其進行語匯分析及名字的決議!——這就是聲明

"定義",為內存占有,編譯器將在相對內存地址上對其對象制定一個地址及其范圍!

雖然從兩者的定義可以看出明顯的區別,但在實際應用中,我們經常會遇到模稜兩可的情況。例如:

string str;  //這是定義,因為翻譯器給其分配了內存控件
還有下面的情況:
class ClassA {

int i;
//在申明類中來使用一個int類型,並沒有為其分配內存,那麼它就是申明

};
 
這樣子的情況可以總結為:
內置類型的簡單初始使用就會為其分配內存,那麼就是定義;而在自定義類型中使用簡單內置類型,那麼就是申明;或者可以這麼說,

類永遠只是聲明。類成員函數的函數體是定義。

還有一些額外的情況,

1.變量和對象不加extern永遠是定義,類中的除外。
2.函數只有函數頭是聲明,有函數體的是定義。

Copyright © Linux教程網 All Rights Reserved