System.AnsiString
Delphi
type AnsiString = { built-in type };
C++
typedef AnsiStringT<0> AnsiString;
プロパティ
種類 | 可視性 | ソース | ユニット | 親 |
---|---|---|---|---|
type typedef |
public | System.pas sysmac.h |
System | System |
説明
動的に割り当てられた文字列を表します。その最大長の制限は利用可能なメモリによってのみ変わります。
AnsiString の変数の構造は、文字列情報を保持します。 変数が空である場合(つまり、ゼロ長の文字列を含む場合)、ポインタは nil であり、文字列がストレージをさらに使用することはありません。 変数が空ではない場合、文字列値を含む、動的に割り当てられたメモリ ブロックを変数は指しています。 このメモリはヒープに割り当てられますが、その管理は完全に自動化されていて、ユーザー コードは必要ありません。 AnsiString 構造には、32 ビット長の指示子、32 ビットの参照カウント、各文字のバイト数を示す 16 ビットのデータ長、および 16 ビットのコード ページが含まれます。 デフォルトでは、このコード ページが、オペレーティング システムのコード ページに設定されます。 これは、SetMultiByteConversionCodePage を呼び出すことで変更できます。
AnsiString はシングルバイト文字列を表します。 シングルバイト文字セット(SBCS)を使用すると、文字列の各バイトが 1 つの文字を表します。 マルチバイト文字セット(MBCS)では、各要素がシングルバイトでも、1 バイトで表される文字も、1 バイト以上で表される文字もあります。 マルチバイト文字セット、特にダブルバイト文字セット(DBCS)は、アジア言語に広く使用されています。 AnsiString は、MBCS 文字を含んでいる場合があります。
AnsiString のインデックスは 1 から始まります。 マルチバイト文字列のインデックスの信頼性は高くありません。これは、S[i] が、S 内での i 番目のバイトを(必ずしも i 番目の文字列はなく)表すからです。 i 番目のバイトはシングル文字の場合も、文字の一部の場合もあります。 ただし、AnsiString 文字列処理の標準関数にはマルチバイトに対応する同様の関数があり、文字のロケール固有の順序を実装しています。 (通常、マルチバイト関数の名前の先頭には Ansi- が付く。 たとえば、マルチバイト版の StrPos は AnsiStrPos)。 マルチバイト文字がサポートされているかどうかは、オペレーティング システムや現在のロケールによって異なります。
AnsiString の変数にはポインタがあるため、2 つ以上の長い文字列の変数がさらにメモリを消費せずに同じ値を参照できます。 コンパイラはこれを利用して、リソースを節約して迅速に代入を実行します。 AnsiString の変数が破棄されるか新しい値が代入されると、古い AnsiString(変数の以前の値)の参照カウントはデクリメントされ、新しい値(ある場合)の参照カウントはインクリメントされます。 文字列の参照カウントがゼロになると、割り当てられたメモリが解放されます。 これは参照カウント処理と呼ばれます。 インデックスを使用して文字列内の 1 文字の値を変更すると、参照カウントが 1 より大きい場合にのみ文字列のコピーが作成されます。 これをコピーオンライト セマンティクスと呼びます。
- メモ:AnsiString は、Delphi デスクトップ コンパイラで使用されるますが、Delphi モバイル コンパイラではサポートされていません。 詳細については、「デスクトップ アプリケーションからモバイル アプリケーションへの Delphi コードの移行」を参照してください。