13

私の無知を許していただく必要がありますが、私は c++ でワイド文字セットを使用することに慣れていませんが、各リテラルの前に L を付けずに c++ でワイド文字列リテラルを使用できる方法はありますか?

もしそうなら、どのように?

4

4 に答える 4

25

いいえ、ありません。L プレフィックス (または、Unicode 用にコンパイルされた場合に L に展開される VC++ の _T() などのマクロ) を使用する必要があります。

于 2008-11-03T21:59:19.577 に答える
18

新しい C++0x 標準では、これを行う別の方法が定義されています:
http://en.wikipedia.org/wiki/C%2B%2B0x#New_string_literals

于 2008-11-03T22:40:48.730 に答える
3

関連するメモで..私は次のことをしようとしています

#define  get_switch( m )   myclass::getSwitch(L##m)

これはマクロであり、展開されます

get_switch(isrunning)

の中へ

myclass::getswitch(L"isrunning")

これはc++visualstudio2008で正常に機能します

しかし、同じコードをmac Xcode(iphoneの場合)でコンパイルすると、次のエラーが発生します。

error: 'L' was not defined in this scope.

編集:解決策

#define  get_switch( m )   myclass::getSwitch(L ## #m)

これはvc++とmacxcode(gcc)の両方で機能します

于 2009-01-26T15:35:39.407 に答える
1

文字列リテラルの前に L を付けたくないのはなぜですか? これは非常に単純です。L のない文字列は ANSI 文字列 ( const char*) であり、L のある文字列はワイド文字列 ( const wchar_t*) です。TEXT()Uncode を使用するように設定されている現在のプロジェクトに応じて、文字列リテラルを ANSI またはワイド文字列にするマクロがあります。


#ifdef UNICODE
#define TEXT(s) L ## s
#else
#define TEXT(s) s
#endif

_T()と同等のマクロもありTEXT()ます。

于 2008-11-03T21:58:46.990 に答える