文字运算符模板:为什么不用字符串?

时间:2016-09-30 18:52:55

标签: c++ templates c++11 user-defined-literals

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

举个例子:

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

它可以用作10_x,但它既不能用作foo_x也不能用作&#34; foo&#34; _x。

除了明显的原因 because the standard says that 之外,处理字符串文字时不考虑它们的技术原因(如果有的话)是什么?

我发现了proposal(好吧,不完全一样,但是它提出了一个想法),但仍然不是一个选择。
什么阻止他们用于字符串?

1 个答案:

答案 0 :(得分:7)

有哪些并发症涉及字符集和编码等混乱。如果字符集编码在运行时和编译时间之间有所不同会发生什么,如果有多种方法对同一个字符进行编码会发生什么情况,字符串是utf-8编码还是不同编码做什么?您是否转换为运行时字符集?

也许有简单的答案;但是有足够的复杂性,提议者去了#34;好吧,我们会削减这个&#34;并且文字符合标准。

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

但您链接到与N2750关联的文档,并直接声明:

  

可能需要一个&#34; raw&#34;字符串文字的形式,其中

"Hello, " L"Worl\u0044!"
     

可与

区分开来
L"Hello, World!"
     

但这与翻译阶段相互影响很严重   此功能没有令人信服的用例。