【Primer C++】第二章:變數和基本型別
阿新 • • 發佈:2019-02-10
使用列表初始化
初始化內建型別時,若存在丟失資訊的風險,編譯器將會報錯:
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