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

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)化。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容