max*_*zig 4 c++ string gcc rawstring c++11
考虑一个具有UNIX行尾(即'\x0a'而不是"\x0d\x0a")并且包含以下原始字符串文字的C ++文件:
const char foo[] = R"(hello^M
)";
Run Code Online (Sandbox Code Playgroud)
(^M实际字节为0x0d(即回车))。
后续字符串比较(考虑标准对原始字符串文字的定义时)应该是什么结果?
strcmp("hello\r\n", foo);
Run Code Online (Sandbox Code Playgroud)
字符串应该相等还是不相等?(即0或!=0?)
使用GCC 4.8(在Fedora 19上),它们比较不相等。
这是GCC中的错误或功能吗?
就标准而言,您只能在字符串文字中(以及程序中的其他位置)使用基本源字符集的成员。程序的物理表示方式如何映射到基本源字符集是实现定义的。
g ++显然认为ASCII \ x0a,ASCII \ x0d和ASCII \ x0d \ x0a都是基本源字符集成员“换行符”的有效表示形式。考虑到希望在Windows,Unix和Mac OS X Classic计算机之间传输源代码以保持其含义,这是完全合理的。
| 归档时间: |
|
| 查看次数: |
1845 次 |
| 最近记录: |