const
const(constant)關鍵字可修飾變量、函數(shù)參數(shù)、返回值或函數(shù)體。
- 定義只讀變量。
- 限制函數(shù)參數(shù)。防止意外修改。增加程序安全性和可靠性。
- 如
const char *p表示,p指針指向的值不可更改,就是這個指針不能用來修改數(shù)據(jù) - 如
char *const p表示,p指針指向的地址不可更改 - 如
const int arr[]則數(shù)組內(nèi)的值都不能修改 -
const char *const p表示,所指向的數(shù)值和地址都不能變 const double locked[4]double *pc=rates-
pc=locked這句是非法的。因為locked是不能修改的
- 如
源文件中使用const int i = 1則在其他文件中應使用extern const int i,如在頭文件中則應用static const int i = 1,因為各文件中需要包含這個頭文件,需要static保證內(nèi)部性。但如果用此方法存儲數(shù)組,因為各個文件都需要創(chuàng)建這個靜態(tài)數(shù)組,可能會占用較多的存儲空間,需要從更多方面去考慮它的利弊。
volatile
volatile限定詞則表示變量除了可被程序修改外還可能被外部代理修改,如變量保存當前的時鐘時間。
編譯器優(yōu)化編譯時會把不變的值放在寄存器,以供讀取,標記volatile可以保證不被放入寄存器。
如不能被程序改變而能被代理改變則const volatile int i。
restrict
restrict只能用于指針int* restrict ptr,這樣就使得ptr是指向某數(shù)據(jù)塊的唯一方式。
可防止數(shù)據(jù)被其他指針操作。如在memcpy中為防止有重疊區(qū)域,采用restrict修飾傳入的指針。同時,restrict也有利于編譯器優(yōu)化。