onemoo
2016-06-10 14:45:34 +08:00
我觉得这个应该算是翻译时用词的问题。
描述这段相应的原文中是这样的:
“ Because a declaration can involve only a single base type, the initializers for all the variables in the declaration must have types that are consistent with each other ”
我粗译一下:
因为一句声明只能有一个 base type (这里的 base type 指的是 auto 所代表的类型),所以多个(被声明的)变量的 initializer 的类型必须能够相互配合一致。
“ The type that the compiler infers for auto is not always exactly the same as the initializer ’ s type ”
——编译器推断出来的 auto 类型并非一定与 initializer 的类型一致
“ when we use a reference as an initializer, the initializer is the corresponding object ”
——当我们用引用作为 initializer ,我们其实用的是“被引用的对象”,(推断出的也是被引用对象的类型)
这几句的意思就是初值的类型不一定和 auto 类型一致,只要它们能匹配“通常的声明规则”即可。 使用 auto 时,通常的声明规则仍是有效的。
所以,我感觉不应翻译为“因此初始值必须是同一种类型”,因为原文中始终用的是 consistent 而非 same ,原意为:后面各个变量的初始值的类型,必须能够[互相]与 auto 匹配。
你最后所说:如果单独定义 auto *p2 = &ci; 那么 p2 是不是就变为指向整型常量指针的指针了呢?是不是这里的 auto 就被推演为 const int*了呢?
这个 auto 就会被推断为 const int 类型, auto *p2 即是 const int *p2 , p2 不正是 const int 指针吗。