C 17是否允许非ASCII字符作为标识符
Does C++17 allow a non-ascii character as an identifier?
在cppref上,我找到了一个奇怪的c 代码,该代码在源代码中使用非ASCII字符如下:
template <char...> double operator "" _π(); // OK
但是,上面的代码不能用clang 6.0汇总。错误消息是:
error : source file is not valid UTF-8
1>double operator "" _<A6><D0>()
1> ^
我的问题是:
- 这符合C 17?
- 请注意,用户定义的
_π
没有参数,那么如何使用_π
?只需使用double var = _π;
?
从您提供的链接中,引用:
如果字面运算符是模板,则必须具有一个空参数 列表,只有一个模板参数,必须是 具有元素类型char
的非型模板参数包
template <char...> double operator "" _x();
让我们看看这意味着什么,
符号char...
表示可以使用char
类型的0、1、2或更多参数对此模板进行实例化。这意味着每次编译器都会遇到像1234_km
这样的文字时,都应将其视为以下功能:
operator"" _km<'1', '2', '3', '4'>();
代表文字的整个字符串将传递(切碎(作为模板参数。请参阅此内容,以获取用法。
以及允许的字符范围:(请参阅此附件E(
00A8, 00AA, 00AD, 00AF, 00B2-00B5, 00B7-00BA, 00BC-00BE, 00C0-00D6, 00D8-00F6, 00F8-00FF
0100-167F, 1681-180D, 180F-1FFF
200B-200D, 202A-202E, 203F-2040, 2054, 2060-206F
2070-218F, 2460-24FF, 2776-2793, 2C00-2DFF, 2E80-2FFF
3004-3007, 3021-302F, 3031-303F
3040-D7FF
F900-FD3D, FD40-FDCF, FDF0-FE44, FE47-FFFD
10000-1FFFD, 20000-2FFFD, 30000-3FFFD, 40000-4FFFD, 50000-5FFFD,
60000-6FFFD, 70000-7FFFD, 80000-8FFFD, 90000-9FFFD, A0000-AFFFD,
B0000-BFFFD, C0000-CFFFD, D0000-DFFFD, E0000-EFFFD
相关文章:
- C++字符*缓冲区的大小
- HEX值到wchar_t字符(UTF-8)的转换
- 为什么 Serial.println(<char[]>);返回随机字符?
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 我的字符计数代码计算错误.为什么
- 字符串-C++后显示的随机字符
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 如何在C++中从字符串中分割字符
- 为什么msgrcv()将垃圾字符馈送到缓冲区
- 指向指向字符数组的指针数组的指针
- 如何用转义符替换字符串中的所有特殊字符
- 为什么 sscanf 无法从一个字符串中读取uint64_t和字符?
- #ifdef和未声明的标识符
- 比较字符数组
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 如何在C++中确定文本文件中的元素是字符还是数字
- C 17是否允许非ASCII字符作为标识符
- 是否有任何法律语法允许引号出现在 javascript 中的标识符字符旁边?(如"so")