当前位置:  开发笔记 > 编程语言 > 正文

用户定义的文字定义

如何解决《用户定义的文字定义》经验,为你挑选了1个好方法。

我正在查看用户定义的文字的cppreference页面,我想除了几个例子我理解了所有内容

template  double operator "" _?(); // OK

这个操作符如何工作?你怎么称呼它?

double operator"" _Z(long double); // error: all names that begin with underscore
                                   // followed by uppercase letter are reserved
double operator""_Z(long double); // OK: even though _Z is reserved ""_Z is allowed

上述两个功能有什么区别?如果第一个函数不是错误,那么调用第一个函数而不是第二个函数会有什么不同?

谢谢!



1> 小智..:
template  double operator "" _?(); // OK

这个操作符如何工作?你怎么称呼它?

1.234_?会打电话operator "" _?<'1', '.', '2', '3', '4'>().此表单允许您检测通常无法检测到的拼写差异(例如,1.2vs 1.20),并允许您避免因为1.2甚至无法完全表示而导致的舍入问题long double.

double operator"" _Z(long double); // error: all names that begin with underscore
                                   // followed by uppercase letter are reserved
double operator""_Z(long double); // OK: even though _Z is reserved ""_Z is allowed

上述两个功能有什么区别?

C++标准根据标记定义语法,您可以将其解释为单词."" _Z是两个令牌,""_Z.""_Z是一个单一的标记.

这种区别很重要:给定#define S " world!",然后"Hello" S,空格是S独立标记的原因,防止它被视为用户定义的文字后缀.

为了更容易编码,在定义这些函数时通常允许使用"" _Z""_Z语法,但"" _Z语法需要_Z被视为标识符.当实现预定义_Z为宏或将其声明为自定义关键字时,这可能会导致问题.

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有