说我有以下代码:
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> &
(参考)?
答案 0 :(得分:1)
->
运算符的左侧是表达式。没有引用类型的表达式:
5p5如果表达式最初具有“对T的引用”类型(8.3.2,8.5.3),则在进行任何进一步分析之前将类型调整为T.表达式指定由引用表示的对象或函数,表达式是左值或x值,具体取决于表达式。