http://cplusplus.com/reference/string/basic_string/operator[]
我知道拥有第二个版本是有利的,该版本const
在需要结果时返回以防止警告const
并减轻强制转换,但如果该函数已经提供了非const
方法(方法 - 不是结果),那么声明的意义何在const
-结果方法const
?
http://cplusplus.com/reference/string/basic_string/operator[]
我知道拥有第二个版本是有利的,该版本const
在需要结果时返回以防止警告const
并减轻强制转换,但如果该函数已经提供了非const
方法(方法 - 不是结果),那么声明的意义何在const
-结果方法const
?
您需要了解,第二个 ( const
) 版本不仅返回不同的结果,而且还将自身标记为const
(这是const
声明末尾的第二个):
const_reference operator[] (size_type pos) const;
这是两件不同的事情:如果const
存在非方法,则不需要返回值本身const
(因为总是可以将非常量返回值转换为const
版本)。
但是没有const
运算符的 -version 意味着您不能在const
字符串对象上使用它。
结果const
只是const
运算符本身的结果:如果您有一个const
字符串并使用运算符来获取对单个字符的引用,显然这个引用也必须是const
(如果没有,您可以更改字符串中的单个const
字符)。
假设你有
const std::string str{"test"};
std::cout << str[2];
如果您没有const
成员函数,则上面的代码将失败,因为this
隐式传递给operator[]
is的指针const
。
如果您有 a const std::basic_string
,则不能调用 (non-const) std::basic_string::operator[]
,因为它没有标记为 const。
如果没有const
该函数的版本,则无法在const
实例上调用该函数。例如:
void func (const std::string &h)
{
if (h[0] == "hello")
...
}
如果没有 的const
版本,这将如何工作operator[]
?
该const
方法返回一个不同的类型,它返回一个const
-qualified 引用。这意味着如果使用该const
方法,则该方法的结果是const
合格的(因此是“不可变的”)。非const
限定方法返回一个常规引用,它是“可变的”。
您不能只有方法,const
否则您不能修改非const
限定std::basic_string
对象中的单个字符。而且您不能只拥有非const
方法,否则您将无法在const
-qualifedstd::basic_string
对象上调用该方法。