亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

靜態ConstVS#定義

靜態ConstVS#定義

C++ C
jeck貓 2019-07-08 16:20:14
靜態ConstVS#定義用它更好嗎?static const瓦爾斯#define預處理器?或者這取決于背景?每種方法的優缺點是什么?
查看完整描述

3 回答

?
德瑪西亞99

TA貢獻1770條經驗 獲得超3個贊

就我個人而言,我討厭預處理器,所以我總是和康斯特一起去。

#Definition的主要優點是它不需要在程序中存儲內存,因為它實際上只是將一些文本替換為一個文字值。它還具有沒有類型的優點,因此可以在不生成警告的情況下用于任何整數值。

“Const”的優點是它們可以限定作用域,并且可以在需要傳遞指向對象的指針的情況下使用它們。

不過,我不知道你對“靜態”部分到底做了些什么。如果是全局聲明,我會將它放在一個非命名空間中,而不是使用靜態名稱空間。例如

namespace {
   unsigned const seconds_per_minute = 60;};int main (int argc; char *argv[]) {...}


查看完整回答
反對 回復 2019-07-08
?
長風秋雁

TA貢獻1757條經驗 獲得超7個贊

如果這是一個C+問題并提到#define作為另一種選擇,它是關于“全局”(即文件范圍)常量,而不是關于類成員的。當涉及到C+中的這些常量時static const是多余的。在C+中const默認情況下有內部鏈接,沒有必要聲明它們static..所以這真的是關于constv.V.#define.

最后,在C+中const更好。至少因為這些常量是類型和作用域的。根本沒有理由喜歡#define過關const除了少數例外。

字符串常量BTW就是這種異常的一個例子。帶著#defined字符串常量可以使用C/C+編譯器的編譯時級聯特性,如

#define OUT_NAME "output"#define LOG_EXT ".log"#define TEXT_EXT ".txt"const char *const log_file_name = OUT_NAME LOG_EXT;
const char *const text_file_name = OUT_NAME TEXT_EXT;

又一次,以防萬一,當有人提到static const作為替代#define,這通常意味著他們談論的是C,而不是C+。我想知道這個問題是否有適當的標記.。


查看完整回答
反對 回復 2019-07-08
  • 3 回答
  • 0 關注
  • 692 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號