可以使用替代令牌形成右值参考:
int and i = 0;
也可以在拼接物理源线以形成逻辑源线之后形成:
int &\
& i = 0;
那么为什么下面的程序没有编译?
int main() {
int &\
bitand i = 5;
}
根据标准,我不明白为什么不应该这样做。
[lex.digraph] 在语言的各个方面,每个替代令牌 除了它之外,它们的主要标记分别表现相同 拼写。
[lex.phases] 立即反斜杠字符(\)的每个实例 后面跟一个新行字符被删除,拼接物理来源 线条形成逻辑源线。只有最后一个反斜杠 物理源线应有资格成为此类物流的一部分 剪接。
是否有我错过的其他信息,或者这是编译器错误?
答案 0 :(得分:4)
反斜杠+换行序列是一个红色的鲱鱼。这些事情在标记化阶段(分别是翻译的第二阶段和第三阶段)之前被删除。因此,我们可以专注于这些片段:
&&
&bitand
第一行有一个标记&&
。第二行有两个令牌,&
和bitand
。最后一个标记等同于&
,因此第二行的行为就像它包含两个&
标记一样。这与一个&&
令牌不同。后者由两个&
个字符组成,而不是两个&
个令牌。