为什么返回基本类型的const引用?(的std :: string ::运算符[])

Pau*_*aul 5 c++ oop

运营商的签名std::string::operator[]是:

char& operator[] (size_t pos);
const char& operator[] (size_t pos) const;
Run Code Online (Sandbox Code Playgroud)

为什么const版本会返回const char&,而不仅仅是char

Sam*_*hik 6

因为const对象的整个目的是它不能被修改.如果const类成员(在这种情况下)返回对字符串中字符的可变引用,则可以对其进行修改.

现在,就目前operator[]而言,这是因为您可以使用&运算符来获取指向它的指针.毕竟,这样的事情是相当普遍的:

 auto *foo=&bar[baz];
Run Code Online (Sandbox Code Playgroud)

您将无法使用普通的右值返回类型执行此操作.在const这种情况下,至少你可以得到一个指针.

  • @πάνταῥεῖ不,我没有.我只是在说他们为什么不``char operator [](size_t)const` vs`conc char&operator [](size_t)const`. (3认同)
  • OP询问了`const char&`vs`char`(不是`char&`)(即,为什么不是const过载的`char`),对吗? (2认同)