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

时间:2015-06-13 16:00:26

标签: c++ c++11 stl language-design stdstring

std::string访问者(backfrontatoperator[])包含const和非const重载,如下所示:

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

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

根据rules of thumb on how to pass objects around,当没有必要修改原始文件时,不应该通过值传递小对象吗?

2 个答案:

答案 0 :(得分:10)

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

DynamoDB (using PHP)

答案 1 :(得分:1)

因为上下文。

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

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

这里返回引用提供了灵活性,它也与非const变量和其他stl容器一致。所有这些功能实际上都是std::basic_string<char>的成员。

请记住,“经验法则”是指导原则而不是规则。