您好,登錄后才能下訂單哦!
這篇文章主要介紹“C++如何避免非常數全局變量”,在日常操作中,相信很多人在C++如何避免非常數全局變量問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”C++如何避免非常數全局變量”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
非常數全局變量會隱藏依賴關系并導致依賴對象不可預知地被修改。
Example(示例)
struct Data {
// ... lots of stuff ...
} data; // non-const data
void compute() // don't
{
// ... use data ...
}
void output() // don't
{
// ... use data ...
}
譯者注:全局變量可以被任何代碼看到,也就可能被任何代碼修改。如果變量命名時沒有特殊的規則,這種問題就會更加難以解決。
Note(注意)
全局常量是有用的。
Note(注意)
針對全局變量的規則同樣適用于命名空間范圍的變量。
可選項:如果你使用全局(更普遍的情況是命名空間范圍)數據來避免拷貝,考慮通過一個const類型的參照進行傳遞。另一個解決方案是將數據定義成某些對象的狀態并將操作定義為成員函數。
譯者注:第一種情況時,使用const參照的代碼無法改寫全局變量的內容,這樣就可以限制對全局變量的修改;第二種情況可以通過成員函數控制和檢查針對全局數據的修改。
警告:小心數據競爭。如果兩個線程訪問同一個數據(可以是全局的或者或者通過參照傳遞的),就可能出現數據競爭。每一個指向可修改數據的指針或者引用都可能發生數據競爭。
Note(注意)
你沒有辦法讓不可修改的數據發生數據競爭。
Note(注意)
這條準則是“避免”而不是“禁止使用”。當然存在(很少)例外情況。例如:cin,cout和cerr等。
(簡易)報告所有定義在命名空間范圍的非常數變量。
到此,關于“C++如何避免非常數全局變量”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。