程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++聲明和定義

C++聲明和定義

編輯:C++入門知識

1. 參考   1. 《C++程序設計語言》4.9     2. 《C++Primer》2.3.5     3. http://bbs.csdn.net/topics/190026622   2. 概念   2.1 聲明               聲明用於向程序表明變量的類型和名字。(引自參考2)     2.2 定義       變量的定義用於為變量分配存儲空間,還可以為變量指定初始值。在一個程序中,變量有且僅有一個定義。   3. 對比     定義是聲明,聲明大部分是定義,少數情況不是定義。     聲明   定義   非定義   定義   是否可以出現多次?   是   否   否   是否有內存分配?   沒有   有   有   是否可以直接使用該變量?   不能   能   能   是否知道它的構成?   不一定知道   知道   知道         3.1 聲明但不是定義的情況       除了下面三種情況,聲明全都是定義。               3.1.1 聲明來自其他文件的非初始化變量 extern int i; // 這是聲明不是定義,變量i的定義在其他文件中                      注意:如果對來自其他文件的變量進行初始化,那麼這就是定義   extern int i = 10; // 這是聲明且是定義              3.1.2 聲明類型 struct User; // 這是聲明不是定義             3.1.3 聲明方法 double _sqrt(double); // 這是聲明不是定義     3.2 聲明且是定義的情況 復制代碼 int i; char ch; string s; int count = 1; const double pi = 3.14; const char *name = "Njal"; const char *season[] = {"spring", "summer", "fall", "winter"}; struct Date { int d, m, y; }; int day(Date *p) { return p->d; }; template <typename T> T _abs(T a) { return a < 0 ? -a : a; } enum Beer { Carlsberg, Tuborg, Thor}; namespace NS { int a; }; 復制代碼      3.3 特殊情況     3.3.1 使用extern修飾變量,且初始化 extern int i = 10; // 這是定義     3.3.2 使用typedef        這是個糾結的問題,我現在還沒想明白,如果你知道請回復我,謝謝。          C++的作者認為   typedef comple<short> Point; // C++的作者認為這是定義         但是對於這種情況呢?   struct User; // 這是聲明非定義 typedef User USER; // 這是不是定義呢?      3.3.3 類定義中的成員變量 struct Date  {      int y; // 這是定義  }     下面是關於聲明與定義的帖子的一個回復以及我的觀點,讀者可以參考。   論壇上某人的回復如下。(引自參考3)   復制代碼 1. 變量和對象不加extern永遠是定義,類中的除外.  2. 函數只有函數頭是聲明,有函數體是定義.  3. 類永遠只是聲明.類成員函數的函數體是定義.    class C  {      static int x;//這裡的x是聲明      static const int a;;//這裡的a是聲明       //非static變量在類定義對象時才分配內存.       C();//這裡的函數是聲明 };  int C::x;//這個才是定義  const int C::a=11;//這個才是定義 復制代碼      我的觀點:   復制代碼 1. "變量和對象不加extern永遠是定義"是片面的,例如特殊情況extern int i = 10就是定義。     "變量和對象不加extern永遠是定義,類中的除外",我認為類中的變量和對象也是聲明。  2. "函數只有函數頭是聲明,有函數體是定義.",我認為是正確的。 3. "類永遠只是聲明.類成員函數的函數體是定義.",我認為類永遠都是定義。  class C  {    static int x;//這裡的x是定義       static const int a;//這裡的a是定義       C();//這裡的函數是聲明  };  int C::x;//這個是初始化  const int C::a=11;//這個是初始化

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved