2014-03-19 68 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不是。