Cpp 文字列リテラル
C++に戻る
本来の表記は「C++(Cpp) 文字列リテラル」です。この記事に付けられた題名はテンプレート:記事名の制約から不正確なものとなっています。 |
※このページではC++にのみ存在する機能として、記事タイトルがC++ 文字列リテラルになっています。
文字列リテラル
文字列リテラルのリテラル(Literal)とは英語で文字通りのという意味があります。プログラムでは文字列そのものを表す表現という意味でもあり、初期化や関数の引数で文字列を指定するときの表現となっています。C++ではダブルクォーテーションで囲うものが有名です。
< syntaxhighlight lang="cpp">
"abc"
</syntaxhighlight>
はいはい。見たことあります。こういう表記ですね。みたことない?。そっかそっか。まだまだ知らない人もいるんだね。文字列を引数にとる関数を呼び出すときは、以下のようにも表記できるってことです。
< syntaxhighlight lang="cpp">
function("abc");
</syntaxhighlight>
おー。ダブルクォーテーションの使い方。これこれ。これを見たかったね。
ここからがこの記事の本番です。ダブルクォーテーションで囲うのなんて、みんな知ってるっつうのね。プログラムやったことある人ならね。このリテラルっていうものには、たくさんの種類が準備されているのが、C++なのです。それをここで全部知っていこうとする記事です。リテラル。深い!
まずは、wchar_t型の引数の場合はこうですね。Unicodeの範囲が使えるよね。
< syntaxhighlight lang="cpp">
function(L"日本語もハングル한국어もいけるニダっし、そのほかの謎の国際言語Киргиз тилиってね。");
</syntaxhighlight>
このようにL""とするだけで使えます。そしてマイクロソフトが考えた_TでUnicodeを使うプロジェクトの場合はL""と同じで、そうでないプロジェクトに対しては""で扱うみたいな方法があって
< syntaxhighlight lang="cpp">
function(_T("Hello, World!"));
</syntaxhighlight>
という記法です。これは
Character Set (文字セット):
プロジェクトのプロパティを開きます。 「構成プロパティ」 -> 「詳細設定」 -> 「文字セット」 「文字セット」が「Unicode 文字セットを使用する」の場合、_T マクロはワイド文字列 (wchar_t型) に展開されます。 Preprocessor Definitions (プリプロセッサの定義):
_UNICODE マクロが定義されていることを確認します。 プロジェクトのプロパティ -> 「構成プロパティ」 -> 「C/C++」 -> 「プリプロセッサ」 -> 「前処理済みのディフェクト」 _UNICODE が含まれていることを確認します。 これらの設定によって、_T マクロは _UNICODE マクロの定義状態に基づいて、適切な文字列型に展開されます。