Namespaces
Variants

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

From 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> 的公开成员函数)