1. 程式人生 > >【Primer C++】第二章:變數和基本型別

【Primer C++】第二章:變數和基本型別

使用列表初始化初始化內建型別時,若存在丟失資訊的風險,編譯器將會報錯:

long double ld = 3.1415926536;

int b = { ld };

預設初始化

變數的預設值與變數型別和變數所處的位置有關,

  • 定義於任何函式之外的變數被初始化為0;
  • 定義在函式體內部的內建型別變數將不被初始化

變數的宣告和定義

變數的宣告:

extern int i;

變數的宣告則是:在變數名前面新增關鍵字extern並且不能顯示地初始化變數;並且在函式體內部,不能初始化由extern關鍵字標記的變數

當為變數賦初始值時:

extern double pi = 3.1416; //將會抵消extern的作用,從而轉變為定義

int j; //宣告並定義

名字的作用域

int reused = 42;

int main()
{
	int reused = 1;

	std::cout << reused << std::endl;

	std::cout << ::reused << std::endl;	// 全域性作用域本身沒有名字,當操作符的左側為空時,將會向全域性作用域請求獲取變數的值

}

複合型別

引用(左值引用)

引用並非物件。

在初始化變數時,初始值會被拷貝到新建的物件中;定義引用時,程式把引用和它的初始值繫結,而非拷貝。一旦初始化完成,將會和它的初始值物件一直繫結在一起。因此無法令引用重新繫結到另外一個物件,因此引用必須初始化。

int &ai = 10; //錯誤
const int &ab = 10; //正確

指標

指標本身就是一個物件。

設定為空指標:
int *p1 = nullptr;
int *p2 = 0;
// 需要首先包含#include cstdlib
int *p3 = NULL; // NULL為預處理變數

void*指標:可存放任意物件的地址

指向指標的引用:

int i = 42;
int *p;
int *&r = p;

要理解r的型別到底是什麼,簡單的方法時從右向左閱讀r的定義:距離變數名最近的符號對變數的型別具有最直接的影響,因此r是一個引用,宣告符的其餘部分確定r引用的型別。

自定義資料結構

struct Sales_data {/*......*/} accm, trans, *salesptr; //最後的分號不要忘記

C++11新標準規定,可以為資料成員提供一個類內初始值,建立物件時,類內初始值用於初始化資料成員。

預處理功能(標頭檔案保護符)

#ifndef XXX
#define XXX
 ......
#endif