考虑以下计划:
#include <iostream>
int main()
{
std::cout<<"Can this lead to undefined behavior?"<<'\s';
}
g ++发出警告:
[Warning] unknown escape sequence: '\s' [enabled by default]
此处'\s'
意外输入'\n'
而不是res.sendFile(path.join(__dirname+'\\showPlayers.html'));
。那么,这个程序定义得好还是未定义? C ++标准对此有何看法? K&amp; R的C编程语言表示它在C中是未定义的行为。
答案 0 :(得分:4)
(N3337 [lex.ccon]/3):
转义序列 其中表7中未列出反斜杠后面的字符是有条件支持的 实现定义的语义。
这意味着如果您的实现支持非标准转义序列,则它们是有效的。有关任何其他字符的语义,请查看特定实现的文档。
答案 1 :(得分:0)
不,按照标准,'\s'
是不允许的。在'
es之间,您必须拥有一系列c-characters
escape-sequence
s,universal-character-name
s或单引号('
以外的字符),反斜杠(\
)或换行符。
您的编译器接受它(根据标准,如果它记录它可以执行)是另一个问题,您应该查阅编译器文档以获取有关它如何解释它的信息(或者停止编写非 - 符合代码)。