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

来自cppreference.com
< cpp‎ | string‎ | basic string
 
 
 
std::basic_string
成员函数
元素访问
basic_string::operator[]
迭代器
容量
操作
搜索
常量
推导指引 (C++17)
非成员函数
I/O
比较
(C++20 前)(C++20 前)(C++20 前)(C++20 前)(C++20 前)(C++20)
数值转换
(C++11)(C++11)(C++11)
(C++11)(C++11)    
(C++11)(C++11)(C++11)
(C++11)
(C++11)
辅助类
 
(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() 具有良好定义

参阅

访问指定字符,有边界检查
(公开成员函数)