讓我們考慮從C++ 11標準以下的報價(the N3376 draft,要準確):用戶定義的字符串文字與Vs.其它用戶定義的字面
(2.14.8.5)
如果L是一個用戶自網絡ned-字符串文字,讓str是沒有它的ud-suffi x的文字,並且讓len是str中的代碼單元的數目(即,其長度不包括終止空字符)。字面L被 視爲如下形式的呼叫
operator "" X (str , len)
而對於所有其它類型的用戶定義的文本(浮點,整數,字符)的長度是永遠不會一起被傳遞,即使文字本身作爲一個字符串傳遞。例如:
42_zzz; // calls operator "" _zzz("42") and not operator "" _zzz("42", 2)
爲什麼字符串和非字符串用戶定義字面值之間存在這種區別?或者我應該說,爲什麼該實現將UD字符串文字傳遞給len?正如其他文字一樣,長度可以通過空終止來推斷。我錯過了什麼?
可能與編碼/字符集有關。在那之前的其他段落都有「[注:序列c1c2 ... ck只能包含來自基本源字符集的字符 - 結束註釋]」。 – Mat
@Mat:但是其他編碼或字符集的字符串仍然以null結尾,不是嗎? –
空終止是不夠的。我猜「基本源字符集」不包括'\ 0'。 – Mat