【发布时间】:2014-01-25 18:40:29
【问题描述】:
int v[1];
auto p1 = v;
auto &p2 = v;
auto *p3 = v;
p1 是 int * 类型(p3 相同)。特别是在这个微不足道的示例中,我发现 p2 ( int (&)[1] ) 更有用,因为它具有数组语义,例如我可以在p2 上申请sizeof 以与v 上的sizeof 相同。
对此有标准报价吗?
为什么默认引用是一个坏主意? (对于这种数组情况,我的意思是,这些天几乎没有 c++ 程序员关心它们......)
【问题讨论】:
-
Is there a standard quotation regarding that?7.1.6.4/7 指定使用auto进行类型推导的规则与模板参数推导的规则相同(模initializer_list)。然后,14.8.2.1/2(用于模板参数推导)指定从数组类型到指针类型的衰减只发生在非引用参数。 -
可能还需要注意这同样适用于函数类型。如果把
v的定义改成void v(),那么p1就是void(*)()但p2就是void(&)() -
C 没有引用,因此数组在作为函数参数传递时会衰减为指针。 C++ 继承了 C 的行为以实现兼容性。
-
@Praetorian 是的,最后,我想我是在讨论天使的性别...
-
您忘记了
auto &&p4 = v;,即int (&)[1]为p2。
标签: c++ templates c++11 auto type-deduction