为什么 std::string return 的 const 访问器是引用?

Why do the const accessors of std::string return a reference?

std::string 访问器 (back, front, at, and operator[]) 有 const 和非 const 重载,如下所示:

char& x();
const char& x() const;

为什么第二个版本 return 是 const 引用 ,而不是简单地 returning char 按值(作为副本)?

按照rules of thumb on how to pass objects around的说法,小对象在不需要修改原来的情况下不应该传值吗?

因为调用者可能需要对 char 的引用,这反映了通过非常量途径对其所做的任何更改。

std::string str = "hello";
char const& front_ref = static_cast<std::string const&>(str).front();
str[0] = 'x';
std::cout << front_ref; // prints x

因为上下文。

您正在处理一个容器和函数,其名称暗示了特定的位置数据。

std::string s = "hello world?";
const auto& s1 = s.back();
s.back() = '!';

在这里返回一个引用提供了灵活性,它也与非 const 变体和其他 stl 容器一致。毕竟这些函数实际上都是 std::basic_string<char>.

的成员

请记住,"rule of thumb" 是准则而非规则。