1. 程式人生 > >C++中的#和##運算符

C++中的#和##運算符

合並操作 col 否則 未定義 info merge eight 標識符 轉換

#和##運算符
#:構串操作符
構串操作符#只能修飾帶參數的宏的形參,它將實參的字符序列(而不是實參代表的值)轉換成字符串常量

#define STRING(x)  #x#x#x
#define TEXT(x)  "class"#x"Info"
//宏引用:
int abc = 100;
STRING(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

C++中的#和##運算符