基于范围的for循环的迭代器类型

时间:2013-08-13 19:19:15

标签: c++11 for-loop

说我有以下代码:

std::vector<std::string> foo({"alice", "bob"});
for (const std::string &f : foo)
    std::cout << f.size() << std::endl;

如果我犯了错误并将f.size()更改为f->size(),我会从GCC收到以下错误:

  

错误:' - &gt;'的基本操作数具有非指针类型' const string {aka   const std :: basic_string}

为什么实际类型为const std::basic_string<char>而不是const std::basic_string<char> &(参考)?

1 个答案:

答案 0 :(得分:1)

->运算符的左侧是表达式。没有引用类型的表达式:

  

5p5如果表达式最初具有“对T的引用”类型(8.3.2,8.5.3),则在进行任何进一步分析之前将类型调整为T.表达式指定由引用表示的对象或函数,表达式是左值或x值,具体取决于表达式。