【发布时间】:2011-04-16 03:15:39
【问题描述】:
我想知道,因为像ULL、f 等预定义的文字显然在编译时就已经解决了。标准(2.14.8 [lex.ext])似乎没有定义这一点,但它似乎倾向于运行时:
[2.14.8 / 2]
用户定义的文字被视为对文字运算符或文字运算符模板(13.5.8)的调用。到 使用 ud-suffix X(literal-operator-id)为给定的用户定义文字 L 确定此调用的形式 使用非限定名称规则在 L 的上下文中查找其文字后缀标识符为 X 查找(3.4.1)。令 S 是此查找找到的声明集。 S 不能为空。
(强调我的。)
但是,对我来说,这似乎引入了不必要的运行时开销,因为文字只能附加到编译时可用的值,例如 13.37f 或 "hello"_x(其中 _x 是用户定义的-文字)。
然后,我们得到了模板化的用户定义文字,它从未真正在标准 AFAICS 中得到定义(即,没有给出示例,请证明我错了)。该函数是在编译时以某种方式神奇地调用,还是仍然在运行时?
【问题讨论】:
标签: c++ c++11 user-defined-literals