9

再一次,在回答另一个问题时,我忘记了(我的错)只有在找到整数或浮点文字时才会从声明集中提取文字运算符模板。

举个例子:

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

它可以用作10_x,但既不能用作foo_x也不能用作“foo”_x。

除了因为标准规定的明显原因之外,在处理字符串文字时不考虑它们的技术原因(如果有的话)是什么?

我还找到了一个建议(嗯,不完全相同,但它给出了一个想法),但这仍然不是一个选择。
是什么阻止它们用于字符串?

4

1 回答 1

8

那里有涉及字符集和编码以及其他此类混乱的复杂情况。如果运行时和编译时的字符集编码不同会发生什么,如果有多种方法来编码相同的字符会发生什么,utf-8 编码的字符串与不同的编码有什么不同吗?您是否转换为运行时字符集?

也许有简单的答案;但是有足够的复杂性,提议者说“好的,我们会削减这个”并且文字进入了标准。

浮点和整数文字所允许的字符在有限的情况下,并且没有这个问题。

但是您链接到了一个链接到N2750的文档,该文档直接声明:

可能需要“原始”形式的字符串文字,其中

"Hello, " L"Worl\u0044!"

区别于

L"Hello, World!"

但这与翻译阶段的交互作用很差,并且没有已知此功能令人信服的用例。

于 2016-09-30T19:02:48.570 回答