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