自动推断
数组
int A[3] = {1, 2, 3};
auto b = A;
typeid(b) == int*
!!!
auto
推断的类型,不一定和原类型相同!!!
原类型A是: A3_i; 而auto类型是:P_i
字符串常量“abc”
,他也是数组 char[4]
。
但是:auto p = "abc"
, p的类型是:const char *
引用
string S;
string & func(){
return S;
}
auto i = func();
i的类型,其实是:string
!!! 而不是引用
!!!
即,auto
并不会对 “引用”生效(实际上是:深拷贝)
因为对于: “引用” 和 “非引用” int a; int & b;
,在“赋值时”,他俩的写法都一样,根据区别不了!
所以,auto
推断出来的是: “非引用”。 即值拷贝。
而且,本来(引用的唯一用处: 就是“函数传参”)
由于 auto 对引用不生效, 如果你想获得 auto的引用,则需要手动添加!!
string a = "abc";
auto & b = a;
此时,b
的类型是:string &
const
auto
对 const
,是不生效的!!!
const int a = 123; auto b = a;
,b
的类型是int
,而不是a
的类型
其实这样是非常合理的。
对于const变量
,当我们使用赋值符时,大多数情况是: 我们想用这个const变量的值,而不是真的构造一个新的const
由于 auto 对const不生效, 如果你想获得 auto的const,则需要手动添加!!
const string a = "abc";
const auto b = a;
此时,b
的类型是:const string
指针
int * a; auto b = a;
auto对指针,是生效的!!!
即,b的类型是: int *
而且,即使你写成:auto * b = a;
,也不会出错 b的类型 依然是:int *