sac*_*ach -5 c++ string macros
以更好的方式构思问题:
有一个logger C++类,它有<<运算符重载以接受整数,字符串..
logR <<"Test"<<endl
Run Code Online (Sandbox Code Playgroud)
现在endl被定义为宏
#define endl "\n\r"
Run Code Online (Sandbox Code Playgroud)
现在在任何.cpp文件中,如果我包含此记录器类的头文件,我曾经得到使用endl的编译错误.
找到一个修复此问题而不是定义宏endl,我重载运算符以接收endl()本身.感谢它帮助解决问题的输入.
从标准N4687:
20.5.4.3.2宏名称
1包含标准库头的转换单元不得在任何标准库头中声明#define或#undef名称.
2翻译单元不得#define或#undef名称与关键字词汇相同,表4中列出的标识符或10.6中描述的属性标记.
因此,标准禁止您尝试做的事情!
此外,在这种特定情况下,它将无法工作,因为您要替换endl某种类型的字符串,导致预处理器生成:std::"\n\r"这会导致编译失败.
如果你wan't更换std::endl的"\r\n"(顺便说一句:没有"\n\r"),然后用手工做,或编写一个脚本来做到这一点.
| 归档时间: |
|
| 查看次数: |
123 次 |
| 最近记录: |