2014-03-19 72 views
3

爲「自動」介紹同義詞「自動」

我想使用"Almost always auto"風格的C++,但在一個更具描述性的形式介紹同義詞,反映初始化的語義。
要做到這一點,我想介紹4個不同用途的汽車的同義詞。
總體思路可以從例子來理解:

#define Val const auto // initialize (immutable) value 
#define MVal auto // initialize mutable value 
#define Ref const auto& // initialize (immutable) reference 
#define MRef auto&& // initialize mutable reference 

Val num = 2 + 2; 

MVal count = 0; 
++count; 

Ref widget = GetWidget(); 

MRef gadget = GetGadget(); 
gadget.ChangeState(); 

幾個方面的問題就出來了:

Q1:能否同義詞而不宏介紹?
Q2:如果宏是不可避免的,如何減輕使用它們造成的危害(假設同義詞應該很短)?
Q3(主要是基於意見):從可讀性/風格的角度來看,它是否是一個好主意(與裸露的AAA風格相比)?
Q4(瘋狂):是否有任何根本原因不允許在typedefs中使用auto(可執行性,與其他功能的不良交互)? (假設「typedef auto」可用,問題可以簡單地解決)

+1

Q4。由於'auto'不是某個類型的名稱,因此不能使用'typedef'來引入新名稱。與宏不同,'typedef'不能通過文本替換工作。 – molbdnilo

回答

3

Q1。 Q2。儘可能少地使用它們。 Q3。相當糟糕。 C++程序員習慣於給定的語法。 Q4。我沒有看到你想要什麼,或者爲什麼。

+0

+1,同意,這樣的同義詞最多隻會誤導。 'const auto&'是非常自我記錄的。 – Nim

3

Q1。是的,同義詞可以用這種方式引入。 Q2。使用ALLUPPERCASE遵循慣例。 Q3。但通常這不是一個好主意,我會發現比VAL Q4更易於讀取const auto。我認爲它不被支持,因爲typedef是一個定義的類型,而const auto不是。