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

C++ 当我使用std::string::operator[]时,为什么自动变量不会成为引用?,c++,string,reference,operator-keyword,auto,C++,String,Reference,Operator Keyword,Auto,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::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];

当您将变量定义为非引用和非指针时,初始值设定项的引用部分将被忽略,然后strRef将被推断为char;规则与

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

auto& strRef = str[1];
请改为尝试自动和stref。请改为尝试自动和stref。