用'auto'同时推断多种类型

我尝试了以下

auto ns=ms.capture[0].init,nl=ms.capture[0].len;
auto ns=ms.capture[0].init,nl=ms.capture[0].len;

因为我懒得查找initlen字段的类型。编译器当然不喜欢它。

我的理解是:

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用实际类型替换说明符(这里不是这种情况),则您的代码将是有效的。


以上是用'auto'同时推断多种类型的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>