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)