このコードは、すべてのプラットフォームで問題ありません。文字列は、静的文字列リテラルとしてバイナリにコンパイルされます。たとえば、Windows を使用している場合は、メモ帳で .exe を開いて文字列自体を検索することもできます。
これは静的文字列リテラルであるため、スコープは重要ではありません。
文字列プーリング:
注意すべきことの 1 つは、場合によっては、同一の文字列リテラルを「プール」して、実行可能ファイルのスペースを節約できることです。この場合、同じだった各文字列リテラルは、同じメモリ アドレスを持つことができます。ただし、そうなるかどうかは決して想定しないでください。
ほとんどのコンパイラでは、リテラルの攪拌に静的文字列プーリングを使用するかどうかを設定できます。
文字列リテラルの最大サイズ:
いくつかのコンパイラには、文字列リテラルの最大サイズがあります。たとえば、VC++ の場合、これは約 2,048 バイトです。
文字列リテラルを変更すると、未定義の動作が発生します。
文字列リテラルの変更は絶対に行わないでください。未定義の動作があります。
char * sz = "this is a test";
sz[0] = 'T'; //<--- undefined results
ワイド文字列リテラル:
上記のすべては、ワイド文字列リテラルにも同様に適用されます。
例: L"これはワイド文字列リテラルです";
C++ 標準の状態: (セクション lex.string)
1 文字列リテラルは、二重引用符で囲まれた一連の文字 (
lex.cconで定義されている) であり、オプションで "..." または L"..." のように文字 L で始まります。L で始まらない文字列リテラルは通常の文字列リテラルであり、ナロー文字列リテラルとも呼ばれます。通常の文字列リテラルの型は「n const char の配列」で、静的な保存期間 ( basic.stc)、ここで、n は以下で定義される文字列のサイズであり、指定された文字で初期化されます。L"asdf" などの L で始まる文字列リテラルは、ワイド文字列リテラルです。ワイド文字列リテラルは、"array of n const wchar_t" 型を持ち、静的な保存期間を持ちます。ここで、n は以下で定義される文字列のサイズであり、指定された文字で初期化されます。
2 すべての文字列リテラルが異なる (つまり、重複しないオブジェクトに格納されている) かどうかは、実装によって定義されます。文字列リテラルを変更しようとした場合の影響は未定義です。