在某些特殊場合下,我們可能需要定義乙個字串巨集,但又不能用雙引號
比如像這樣
#define hello hello world如果我們只是簡單的展開hello,肯定會無法編譯
std::cout << hello << std::endl;展開後變為
std::cout << hello world << std::endl;是的,作為字串,缺少了基本的雙引號,而我們這裡又要求不可以在巨集中加上雙引號
好在巨集可以巢狀,增加乙個巨集
#define hello hello world"#"的作用是把緊跟著的變數替換為字串#define _tmp(str) #str
_tmp(hello)預想的情況下,展開後應該是
"hello world"而實際情況呢,展開後變成了
"hello"為什麼會這樣?注意,這裡的hello是大寫,也就是說_tmp巨集並沒有將引數str當做巨集去展開
所以這裡要記得一點:
巨集中有#運算子時,引數不會被展開
為了能讓引數被順利展開所以就不可以使用"#"符號,最終的巨集定義如下
#define hello hello world1.展開_a,由於沒有"#"符號,hello被順利展開,變為 _tmp(hello world)#define _a(str) _tmp(str)
#define _tmp(str) #str
std::cout << _a(hello) << std::endl;
2._tmp把引數hello world轉換為字串,也就是加上雙引號,變為 "hello world"
至此,我們的目的就達成了!
PHP定義字串時單引號和雙引號的區別
一般用單引號或雙引號標識乙個字串。單引號串與雙引號串,在php中的處理是不同的。雙引號中的內容可以被解釋並被替換,單引號串中的內容則被作為普通字元處理。例如 php view plain copy str 6 echo str is str n echo str is str n 輸出結果為 str...
QString字串中雙引號的梗
qstring字串不支援雙引號 最近做專案 本地環境 win10 qt5.9.2 vs2017 有個需求,需要實現形如 key 123456 這樣的字串。查了很多資料,發現qstring是沒法實現願望的。但是,std string可以實現字元中雙引號的夙願,只要加反斜槓即可。於是,有了下面的 dem...
字串拼接的雙引號和單引號問題,轉義字元
有這麼一句話,想要字串拼接後得到這麼一句話。裡面的組織需要單引號引出,而不是雙引號。最初始是這樣。var org 00000000000000000028 console.log 這樣輸出結果是 沒有單引號。後來改成了這樣。var org 00000000000000000028 console.l...