为什么 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" 是准则而非规则。
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" 是准则而非规则。