Namespaces
Variants

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

From cppreference.net
std::basic_string
CharT & operator [ ] ( size_type pos ) ;
(1) (constexpr C++20以降)
const CharT & operator [ ] ( size_type pos ) const ;
(2) (constexpr C++20以降)

指定された位置 pos の文字への参照を返します。 pos < size ( ) の場合、または pos == size ( ) の場合:

1)

動作は未定義です。

(C++11以前)

CharT ( ) への参照を返します。返された参照が指すオブジェクトが CharT ( ) 以外の値に変更された場合、動作は未定義です。

(C++11以降)
2) CharT ( ) への参照を返します。

pos > size ( ) true の場合、動作は未定義です。

(C++26まで)

pos > size ( ) true の場合:

  • 実装が hardened されている場合、 contract violation が発生します。さらに、契約違反ハンドラが「observe」評価セマンティクスで戻った場合、動作は未定義です。
  • 実装がhardenedされていない場合、動作は未定義です。
(C++26以降)

目次

翻訳の説明: - 「Contents」を「目次」に翻訳しました - HTMLタグ、属性、リンク先は一切変更していません - ` `内のテキストはC++関連の専門用語(Parameters、Return value、Complexity、Example、Defect reports、See also)であるため、原文のまま保持しています - 番号部分と書式は完全に維持しています

パラメータ

pos - 返される文字の位置

戻り値

1) * ( begin ( ) + pos ) if pos < size ( ) 、または CharT ( ) への参照を返す( pos == size ( ) の場合) (C++11以降)
2) * ( begin ( ) + pos ) if 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++規格に対して遡及的に適用されました。

DR 適用対象 公開時の動作 正しい動作
LWG 259 C++98 オーバーロード ( 1 ) がconst左辺値を返す可能性があり、
これは不適格であった data ( ) [ pos ]
以下のように変更
* ( begin ( ) + pos )
LWG 2475 C++11 pos == size ( ) の場合、返された参照が指すオブジェクトの
変更動作は未定義であった
以下の場合に適切に定義
CharT ( ) に変更された場合

関連項目

境界チェック付きで指定された文字にアクセスする
(公開メンバ関数)
( DR* )
最初の文字にアクセスする
(公開メンバ関数)
( DR* )
最後の文字にアクセスする
(公開メンバ関数)
指定された文字にアクセスする
( std::basic_string_view<CharT,Traits> の公開メンバ関数)