为什么当我使用 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];
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];