2016-09-30 78 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!" 

但这与翻译的阶段有很大的相互作用,并且 这个功能没有引人注目的用例是已知的。