用户定义字面量合法字符及指定UDL合法参数范围技术问询
用户定义字面量相关问题解答
1. 用户定义字面量中可使用的有效字符有哪些?
用户定义字面量分为字面量主体和UDL后缀标识符两部分,各自的有效字符规则不同:
- 字面量主体:
- 整数/浮点数字面量:可使用数字、十六进制前缀
0x/0X、八进制前缀0、二进制前缀0b/0B、小数点.、指数符号e/E(十进制浮点数)、p/P(十六进制浮点数),以及数字分隔符'。 - 字符/字符串字面量:可使用普通字符、转义字符(如
\n、\t),对应字符集的合法字符。
- 整数/浮点数字面量:可使用数字、十六进制前缀
- UDL后缀标识符:必须以
_开头,后续可搭配大小写字母、数字,不能以数字开头,且不能是C++关键字(如int、return等)。
2. 模板化UDL template <char... C> auto operator""_myUDL(){return 5;}的合法参数范围是什么?
这是字符序列字面量运算符模板,它能匹配所有非宽字符/非宽字符串类的普通字面量,具体包括:
- 普通字符字面量:例如
'a'_myUDL、'\\'_myUDL - 普通字符串字面量:例如
"hello"_myUDL、"123\n"_myUDL - 十进制/八进制/十六进制/二进制整数字面量:例如
123_myUDL、0755_myUDL、0xABC_myUDL、0b1010_myUDL - 十进制/十六进制浮点数字面量:例如
3.14_myUDL、1.2e-3_myUDL、0x1.8p+3_myUDL
注意:宽字符(L'a')、宽字符串(L"test")、UTF-16(u"test")、UTF-32(U"test")字面量无法匹配该模板,这类字面量需要对应宽字符类型的运算符模板(如template <wchar_t... C>)。
内容的提问来源于stack exchange,提问作者Hesky Fisher
相关产品推荐
相关产品推荐

