首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >指针容器的自动类型推导

指针容器的自动类型推导
EN

Stack Overflow用户
提问于 2018-01-20 18:22:41
回答 1查看 129关注 0票数 0

我不明白为什么编译器在第三个for循环中决定将迭代器itr的指针指向in,而不是像在前2个循环中那样选择指向指针的指针。我试图解析演绎规则,但找不到相关的部分。

代码语言:javascript
复制
void foo()
{
    vector<int*> a;
    int b[] =   { 1, 2, 3 };

    for (int i = 0; i < 3; i++)
    {
        a.push_back(&b[i]);
    }
    for (vector<int*>::iterator itr = a.begin(); itr != a.end(); ++itr)
    {
        //itr is a pointer to a pointer to an int
        cout << **itr << endl;
    }
    for (auto itr = a.begin(); itr != a.end(); ++itr)
    {
        //itr is a pointer to a pointer to an int
        cout << **itr << endl;
    }
    for (auto itr : a)
    {
        //itr is a pointer to an int.  Why?
        cout << *itr << endl;
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-20 18:29:39

来自范围为

( range_declaration : range_expression ) loop_statement (可选) ..。 range_declaration -一个命名变量的声明,的类型是由range_expression表示的序列元素的类型,或者是对该类型的引用。经常使用自动说明符进行自动类型推断。

代码语言:javascript
复制
for (auto itr : a)

在这里,itr获取a中元素的类型,即int*

你可以写:

代码语言:javascript
复制
for (auto& itr : a)

并获得对a中元素的引用,但是无法获得指向该类型的指针。

另一方面,迭代器表示一个类似指针的实体,它指向容器的元素,这就是为什么您使用取消引用两次:一次用来获取迭代器指向的元素的值,并具有一种类型的int*,第二次是从int*获取实际的int值。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48359627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档