为什么不进行bit和正确解析以形成右值引用?

时间:2015-12-31 05:56:51

标签: c++ c-preprocessor token language-lawyer rvalue-reference

可以使用替代令牌形成右值参考:

int and i = 0;  

也可以在拼接物理源线以形成逻辑源线之后形成:

int &\
& i = 0;

那么为什么下面的程序没有编译?

int main() {
    int &\
bitand i = 5;
}

根据标准,我不明白为什么不应该这样做。

  

[lex.digraph] 在语言的各个方面,每个替代令牌   除了它之外,它们的主要标记分别表现相同   拼写。

     

[lex.phases] 立即反斜杠字符(\)的每个实例   后面跟一个新行字符被删除,拼接物理来源   线条形成逻辑源线。只有最后一个反斜杠   物理源线应有资格成为此类物流的一部分   剪接。

是否有我错过的其他信息,或者这是编译器错误?

1 个答案:

答案 0 :(得分:4)

反斜杠+换行序列是一个红色的鲱鱼。这些事情在标记化阶段(分别是翻译的第二阶段和第三阶段)之前被删除。因此,我们可以专注于这些片段:

&&
&bitand

第一行有一个标记&&。第二行有两个令牌,&bitand。最后一个标记等同于&,因此第二行的行为就像它包含两个&标记一样。这与一个&&令牌不同。后者由两个&个字符组成,而不是两个&个令牌。