C++の#と##演算子


#および##演算子#:StruckオペレータStruckオペレータ#パラメータを持つマクロのパラメータのみを修飾します.このパラメータは、実パラメータが表す値ではなく、実パラメータの文字列シーケンスを文字列定数に変換します.
#define STRING(x)  #x#x#x
#define TEXT(x)  "class"#x"Info"
//   :
int abc = 100STRING(abc);
TEXT(abc);
//    :
abcabcabc
classabcInfo

##:マージオペレータマージオペレータ##左右に表示される文字列を新しい識別子にマージします注意:マージオペレータ##を使用する場合、独自の識別子を定義しておく必要があります.そうしないと、コンパイラは「識別子未定義」のコンパイルエラーを報告します.文字シーケンスを新しい識別子に結合するのは文字列ではありません.
#define CLASS_NAME(name) class##name
#define MERGE(x,y) x##y##x
//   :
CLASS_NAME(Timer)
MERGE(me,To)
//    :
classTimer
meTome