2016-09-30 80 views
5

再次回答另一個問題時,我忘記了(我的錯)只有在找到整數或浮點文字時才從這組聲明中拾取文字操作符模板。字面操作符模板:爲什麼不是字符串?

作爲一個例子:

template <char... C> 
constexpr int operator "" _x() { 
    return 0; 
} 

它可以用作10_x,但它不能用於既不foo_x也不是「foo」的_x。

除了顯而易見的原因是because the standard says that,在處理字符串文字時,他們沒有考慮到的技術原因是什麼(如果有的話)?

我發現這也是一個proposal(好吧,不完全一樣,但它提供了一個想法),但仍然不是一個選項。
是什麼阻止它們用於字符串?

+0

您的意思是''foo「_x'? –

+0

@SebastianRedl對,謝謝。 – skypjack

+2

對於它的價值,'foo_x'是一個標識符,所以它永遠不會調用udl。 – Barry

回答

6

那裏有涉及字符集和編碼等混亂的併發症。如果字符集編碼在運行時間和編譯時間之間有所不同,會發生什麼情況,如果存在多種編碼同一字符的方式會發生什麼情況,字符串是utf-8編碼,而不同的編碼是做什麼的?你是否翻譯成運行時字符集,或不?

也許有簡單的答案;但是提案人確實存在足夠的複雜性,「我們會減少這個」,文字就進入了標準。

允許浮點和整數文字限制的字符,並沒有這個問題。

但你鏈接到鏈接到N2750文件,並直接指出:

有可能是字符串文字的「原始」形態的需求,其中

"Hello, " L"Worl\u0044!" 

是區別於

L"Hello, World!" 

但這與翻譯的階段有很大的相互作用,並且 這個功能沒有引人注目的用例是已知的。