【问题标题】:Literal operator template: why not string?文字运算符模板:为什么不是字符串?
【发布时间】:2017-02-09 10:19:14
【问题描述】:

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

举个例子:

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

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

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

我还为此找到了proposal(嗯,不完全相同,但它提供了一个想法),但这仍然不是一个选项。
是什么阻止它们用于字符串?

【问题讨论】:

  • 你的意思是"foo"_x
  • @SebastianRedl 好的,谢谢。
  • 不管怎样,foo_x 是一个标识符,所以它永远不会调用 udl。
  • gcc 有 extension 允许template &lt;typename Char, Char...cs&gt; RetType operator "" _suffix().

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


【解决方案1】:

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

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

浮点和整型文字所允许的字符在有限的地方,没有这个问题。

但是你链接到一个链接到N2750的文档,并且直接声明:

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

"Hello, " L"Worl\u0044!"

区别于

L"Hello, World!"

但这与翻译阶段的相互作用很糟糕,并且 尚无此功能引人注目的用例。

【讨论】:

    猜你喜欢
    • 2019-06-14
    • 2020-09-25
    • 1970-01-01
    • 2015-05-31
    • 2013-01-12
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    • 2023-01-19
    相关资源
    最近更新 更多