C++ 快速入門筆記:基本語法
阿新 • • 發佈:2018-11-21
資料型別
- 列舉型別
enum color { red, green, blue } colors;
colors = blue;
預設情況下,第一個名稱的值是 0,後面的依次加 1。也可以自定初始值:
enum color { red, green = 5, blue };
在這裡,blue 的值為 6 。
變數型別
- 變數宣告
使用多個檔案且只在一個檔案中定義變數時(定義變數的檔案在程式連線時是可用的),可以使用 extern 關鍵字在任何地方宣告一個變數。雖然您可以在 C++ 程式中多次宣告一個變數,但變數只能在某個檔案、函式或程式碼塊中被定義一次。
#include <iostream>
using namespace std;
// 變數宣告
extern int a, b;
extern int c;
extern float f;
int main ()
{
// 變數定義
int a, b;
int c;
float f;
// 實際初始化
a = 10;
b = 20;
c = a + b;
cout << c << endl ;
f = 70.0/3.0;
cout << f << endl ;
return 0;
}
同樣,在函式宣告時,提供一個函式名,而實際定義可以在任意地方進行。
// 函式宣告
int func();
int main()
{
// 函式呼叫
int i = func();
}
// 函式定義
int func()
{
return 0;
}
修飾符型別
- 型別限定符
限定符 | 含義 |
---|---|
const | const 型別的物件在程式執行期間不能被修改改變。 |
volatile | 修飾符 volatile 告訴編譯器,變數的值可能以程式未明確指定的方式被改變。 |
restrict | 由 restrict 修飾的指標是唯一一種訪問它所指向的物件的方式。只有 C99 增加了新的型別限定符 restrict。 |
儲存類
-
auto 儲存類
- auto 儲存類是所有區域性變數預設的儲存類。
-
register 儲存類
- register 儲存類用於定義儲存在暫存器中而不是 RAM 中的區域性變數。這意味著變數的最大尺寸等於暫存器的大小(通常是一個詞),且不能對它應用一元的 '&' 運算子(因為它沒有記憶體位置)。
-
static 儲存類
- static 儲存類指示編譯器在程式的生命週期內保持區域性變數的存在,而不需要在每次它進入和離開作用域時進行建立和銷燬。因此,使用 static 修飾區域性變數可以在函式呼叫之間保持區域性變數的值。
- static 修飾符也可以應用於全域性變數。當 static 修飾全域性變數時,會使變數的作用域限制在宣告它的檔案內。
- 在 C++ 中,當 static 用在類資料成員上時,會導致僅有一個該成員的副本被類的所有物件共享。
-
extern 儲存類
extern 儲存類用於提供一個全域性變數的引用,全域性變數對所有的程式檔案都是可見的。當使用 extern 時,對於無法初始化的變數,會把變數名指向一個之前定義過的儲存位置。
-
當有多個檔案且定義了一個可以在其他檔案中使用的全域性變數或函式時,可以在其他檔案中使用 extern 來得到已定義的變數或函式的引用。可以這麼理解,extern 是用來在另一個檔案中宣告一個全域性變數或函式。例:
// main.cpp int count ; extern void write_extern(); int main() { count = 5; write_extern(); }
// support.cpp #include <iostream> extern int count; void write_extern(void) { std::cout << "Count is " << count << std::endl; }
-
mutable 儲存類
- mutable 說明符僅適用於類的物件。它允許物件的成員替代常量。也就是說,mutable 成員可以通過 const 成員函式修改。
引用
-
建立引用
int i = 17; int &r = i;
& 讀作引用。因此,第一個宣告可以讀作 "r 是一個初始化為 i 的整型引用",第二個宣告可以讀作 "s 是一個初始化為 d 的 double 型引用"。
-
引用呼叫
#include <iostream> using namespace std; // 函式宣告 void swap(int &x, int &y); int main () { // 區域性變數宣告 int a = 100; int b = 200; cout << "交換前,a 的值:" << a << endl; cout << "交換前,b 的值:" << b << endl; /* 呼叫函式來交換值 */ swap(a, b); cout << "交換後,a 的值:" << a << endl; cout << "交換後,b 的值:" << b << endl; return 0; } void swap(int &x, int &y) { int temp; temp = x; /* 儲存地址 x 的值 */ x = y; /* 把 y 賦值給 x */ y = temp; /* 把 x 賦值給 y */ return; }
基本輸入輸出
- 標準錯誤流(cerr)
- 預定義的物件 cerr 是 ostream 類的一個例項。cerr 物件附屬到標準錯誤裝置,通常也是顯示屏,但是 cerr 物件是非緩衝的,且每個流插入到 cerr 都會立即輸出。
- 標準日誌流(clog)
- 預定義的物件 clog 是 ostream 類的一個例項。clog 物件附屬到標準錯誤裝置,通常也是顯示屏,但是 clog 物件是緩衝的。這意味著每個流插入到 clog 都會先儲存在緩衝在,直到緩衝填滿或者緩衝區重新整理時才會輸出。