文 / 李博(光宇广贞)
本篇实验平台信息请见《这篇文章》。
在《C++ 0x 新标准全部革新提案文档列表》中,N1478 N1527 N1607 N1705 N1978 N2115 N2343 等文件提案向新标准语言内核中添加 decltype 算符和 auto 关键字(旧体新义)。该提案由 BS 参与设计。decltype 算符用于查询表达式类型;auto 关键字修饰变量声明,指示编译器根据变量的初始化表达式推导变量应有的类型。
Auto
关于 auto 关键字的用法定义很明确,也没什么花样。首先是定义变量,这里 auto 其需求、其存在价值、其意义、其用法,和 C# 下的 var 关键字一模儿一样。和 var 一样,auto 声明的变量必须“在声明处完成初始化”,编译器才可根据初始化表达式推导变量的类型。无论 auto 还是 var,都算是强类型与易用性之间的妥协罢。
不过 C++ 下的 auto 比 C# 下的 var 要麻烦一些。因为 C++ 把“指针、引用、值”在语义上分得太清楚了。所以在使用上,会带来一些困惑,或者用当下流行的词儿,叫“纠结”……比如如下用法:
在此,var1 和 var2 都会被推导为 int* 型。不过“引用”就另说了,比如如下用法:
在此,refInt 是 int& 型,而 var3 是