Namespaces
Variants

std::basic_string<CharT,Traits,Allocator>::operator[]

来自 zh.cppreference.net
 
 
 
std::basic_string
 
CharT& operator[]( size_type pos );
(1) (C++20 起为 constexpr)
const CharT& operator[]( size_type pos ) const;
(2) (C++20 起为 constexpr)

返回指定位置 pos 处字符的引用,如果 pos < size(),或者如果 pos == size():

1)

行为未定义。

(C++11 前)

返回对 CharT() 的引用,如果返回的引用所指向的对象被修改为除 CharT() 以外的任何值,则行为未定义。

(C++11 起)
2) 返回对 CharT() 的引用。

如果 pos > size() 为 true,则行为未定义。

(C++26 前)

如果 pos > size() 为 true:

  • 如果实现使用 强化模式,则发生 契约违规。
  • 如果实现未强化,则行为未定义。
(C++26 起)

参数

pos - 要返回字符的位置

返回值

1) * ( begin ( ) + pos ) 若 pos < size ( ) ,或返回 CharT ( ) 的引用若 pos == size ( ) (C++11 起) 。
2) * ( begin ( ) + pos ) 若 pos < size ( ) ,或返回 CharT ( ) 的引用若 pos == size ( ) 。

复杂度

常量。

示例

#include <iostream>
#include <string>
int main()
{
    const std::string 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'; // 等价于 s.back() = 'y';
    std::cout << s << '\n';
}

输出:

rmx
Exemplar
Exemplary

缺陷报告

以下行为变更缺陷报告被追溯应用于先前发布的C++标准。

缺陷报告 应用于 发布时行为 正确行为
LWG 259 C++98 重载 ( 1 ) 可能返回常量左值
data ( ) [ pos ] ,这是不合法的
改为返回
* ( begin ( ) + pos )
LWG 2475 C++11 若 pos == size ( ) ,修改返回引用所引用对象
的行为是未定义的
若修改为 CharT ( )
则行为是明确定义的

参见

访问指定字符(带边界检查)
(公开成员函数)
( DR* )
访问首字符
(公开成员函数)
( DR* )
访问末字符
(公开成员函数)
访问指定字符
( std::basic_string_view<CharT,Traits> 的公开成员函数)