为什么std :: string的const访问器返回引用?

eml*_*lai 2 c++ stl language-design stdstring c++11

std::string存取器(back,front,at,和operator[])具有const和非const过载,如下:

char& x();
const char& x() const;
Run Code Online (Sandbox Code Playgroud)

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

根据关于如何传递对象的经验法则,当不需要修改原始对象时,不应该通过值传递小对象吗?

Ben*_*ley 10

因为调用者可能需要对char的引用,这反映了通过非const途径对其进行的任何更改.

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

  • @ixSci:只是因为你无法想象一个用例,并不意味着界面应该被任意限制. (3认同)