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

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

本文关键字:变量 引用 std operator string 为什么      更新时间:2023-10-16

std::string::operator[] 应该返回字符引用:

 char& operator[] (size_t pos);

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

我有以下代码:

std::string str = "Hello";
auto strRef = str[1];
strRef = std::toupper(strRef);
std::cout  << "str after:" << str << std::endl;

在输出上,我会得到"Hello"而不是"HEllo"。

当您将变量定义为非引用和非指针时,初始值设定项的引用部分将被忽略,然后strRef被推导出为char ; 该规则与模板参数推导相同。

您需要将其显式声明为引用。

auto& strRef = str[1];