用'auto'同时推断多种类型
我尝试了以下
auto ns=ms.capture[0].init,nl=ms.capture[0].len;
auto ns=ms.capture[0].init,nl=ms.capture[0].len;
因为我懒得查找init和len字段的类型。编译器当然不喜欢它。
我的理解是:
ttt xx,yy;
相当于
ttt xx;ttt yy;
那么应该同样的工作auto吗?也就是说,不应该
auto xx, yy;
变得:
auto xx, auto yy;
或者有什么我不明白的细节?还是我的编译器有问题?
回答
auto是类型推导的占位符。在您的情况下,它是从初始值设定项中推导出来的。
如你所说:
T1 a, b;
相当于:
T1 a; T1 b; // (A)
但不等同于:
T1 a; T2 b; // (B)
因此,当你写:
编译器很难确定底层类型,因为init成员是 aconst char *而len成员是 an int(根据您的错误消息)。您提供了两个不同类型的初始化程序。我们处于上述示例的情况(B)中。
因此,类型推导失败。
为简单起见,如果可以auto用实际类型替换说明符(这里不是这种情况),则您的代码将是有效的。