std::basic_string<CharT,Traits,Allocator>::operator[]
来自cppreference.com
< cpp | string | basic string
(1) | ||
reference operator[]( size_type pos ); |
(C++20 前) | |
constexpr reference operator[]( size_type pos ); |
(C++20 起) | |
(2) | ||
const_reference operator[]( size_type pos ) const; |
(C++20 前) | |
constexpr const_reference operator[]( size_type pos ) const; |
(C++20 起) | |
在 pos < size() 时返回到位于指定位置 pos 的字符的引用,或在 pos == size() 时返回到拥有值 CharT() 的字符(空字符)的引用。不进行边界检查。
如果 pos > size(),那么行为未定义。
对于重载 (1),如果 pos == size(),那么返回的引用指代的对象被修改成 CharT() 以外的值的 (C++11 起)行为未定义。
参数
pos | - | 要返回的字符位置 |
返回值
在 pos < size() 时返回 *(begin() + pos),或在 pos == size() 时返回到 CharT() 的引用。
复杂度
常数
示例
运行此代码
#include <iostream> #include <string> int main() { std::string const e("Exemplar"); for (unsigned i = e.length() - 1; i != 0; i /= 2) std::cout << e[i]; std::cout << '\n'; const char* c = &e[0]; std::cout << c << '\n'; // 作为 C 字符串打印 // 将 s 的最后一个字符改成 'y' std::string s("Exemplar "); s[s.size() - 1] = 'y'; std::cout << s << '\n'; }
输出:
rmx Exemplar Exemplary
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
LWG 259 | C++98 | 在 pos < size() 时会返回 data()[pos] (它的类型是 const CharT& ,与 reference 冲突)
|
改成 *(begin() + pos) |
LWG 2475 | C++11 | 如果 pos == size(),那么修改返回的引用指代的对象的行为未定义 | 修改成 CharT() 具有良好定义 |
参阅
访问指定字符,有边界检查 (公开成员函数) |