const、volatile和restrict的作用和用法總結
阿新 • • 發佈:2019-02-17
const作用:
const(constant)關鍵字可修飾變數、函式引數、返回值或函式體。
1.定義只讀變數。
2.限制函式引數。防止意外修改。增加程式安全性和可靠性。
如const char *p表示,p指標指向的值不可更改,就是這個指標不能用來修改資料;
如char *const p表示,p指標指向的地址不可更改;
如const int arr[];則陣列內的值都不能修改。
const char *const p表示,所指向的數值和地址都不能變。
const double locked[4];
double *pc=rates;
pc=locked;//這句是非法的。因為locked是不能修改的。
在原始檔中使用const int i = 1;
則在其他檔案中應使用extern const int i;
如在標頭檔案中則應用 static const int i = 1;因為各檔案中需要包含這個標頭檔案,需要static保證內部性。但如果用此方法儲存陣列,因為各個檔案都需要建立這個靜態陣列,可能會佔用較多的儲存空間,需要從更多方面去考慮它的利弊。
則在其他檔案中應使用extern const int i;
如在標頭檔案中則應用 static const int i = 1;因為各檔案中需要包含這個標頭檔案,需要static保證內部性。但如果用此方法儲存陣列,因為各個檔案都需要建立這個靜態陣列,可能會佔用較多的儲存空間,需要從更多方面去考慮它的利弊。
volatile作用:
volatile限定詞則表示變數除了可被程式修改外還可能被外部代理修改,如變數儲存當前的時鐘時間。
編譯器優化編譯時會把不變的值放在暫存器,以供讀取,標記volatile可以保證不被放入暫存器。
如不能被程式改變而能被代理改變則const volatile int i;
restrict作用:
restrict只能用於指標 int* restrict ptr,這樣就使得ptr是指向某資料塊的唯一方式。
可防止資料被其他指標操作。如在memcpy中為防止有重疊區域,採用restrict修飾傳入的指標。同時,restrict也有利於編譯器優化。