1. 程式人生 > >const、volatile和restrict的作用和用法總結

const、volatile和restrict的作用和用法總結

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保證內部性。但如果用此方法儲存陣列,因為各個檔案都需要建立這個靜態陣列,可能會佔用較多的儲存空間,需要從更多方面去考慮它的利弊。
volatile作用:
volatile限定詞則表示變數除了可被程式修改外還可能被外部代理修改,如變數儲存當前的時鐘時間。
編譯器優化編譯時會把不變的值放在暫存器,以供讀取,標記volatile可以保證不被放入暫存器。
如不能被程式改變而能被代理改變則const volatile int i;
restrict作用:
restrict只能用於指標 int* restrict ptr,這樣就使得ptr是指向某資料塊的唯一方式。
可防止資料被其他指標操作。如在memcpy中為防止有重疊區域,採用restrict修飾傳入的指標。同時,restrict也有利於編譯器優化。