为什么当我使用 std::string::operator[] 时 auto 变量不会成为引用?

why auto variable won't become reference when I use std::string::operator[]?

std::string::operator[] 应该 return 字符参考:

 char& operator[] (size_t pos);

但是当我将它传递给自动类型时,它将变成一个简单的字符。为什么它不会变成 char& ?

我有以下代码:

std::string str = "Hello";
auto strRef = str[1];

strRef = std::toupper(strRef);
std::cout  << "str after:" << str << std::endl;

在输出中我将得到 "Hello" 而不是 "HEllo"。

当您将变量定义为非引用和非指针时,初始化程序的引用部分将被忽略,然后 strRef 推导为 char;规则与 template argument deduction.

相同

您需要将其明确声明为引用。

auto& strRef = str[1];