廖茂生*_*廖茂生 20 c++ pointers auto c++11
int foo = 11;
int *p = &foo;
auto pp = p;
auto *ppp = p;
cout << pp << endl;
cout << ppp << endl;
Run Code Online (Sandbox Code Playgroud)
这个程序会为pp
和产生相同的输出ppp
,但为什么呢?auto
推断变量应该是int
,所以我认为声明ppp
是对的.但是pp
并且ppp
具有相同的价值......
输出:
0x61fefc
0x61fefc
Run Code Online (Sandbox Code Playgroud)
lub*_*bgr 30
在您展示的特定示例中,没有区别.但想象一下,您稍后会添加两个const
限定符,如下所示:
const auto pp = p;
const auto *ppp = p;
Run Code Online (Sandbox Code Playgroud)
还是一样吗?原来这是相同的
int * const pp = p; // pointer is readonly
const int *ppp = p; // pointer is readonly
Run Code Online (Sandbox Code Playgroud)
因为in auto pp = p
,auto
匹配int*
作为一个整体,并const
修改其左侧的内容(或右侧的内容,如果左侧没有任何内容).相反,在auto *ppp = p
,auto
匹配int
,这const
适用于.
由于这个显着的差异,并且因为我们应该尽可能使用const
变量,我建议你在auto*
对指针变量使用类型推导时总是使用.没有办法对const
指针本身而不是指针对象进行const
限定,如果你想对两者都进行限定,这是可能的
const auto * const pppp = p;
Run Code Online (Sandbox Code Playgroud)
没有这个就行不通*
.
归档时间: |
|
查看次数: |
1180 次 |
最近记录: |