0

假设我有以下代码:

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

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

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

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

4

1 回答 1

1

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

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

于 2013-08-13T20:14:06.467 回答