右值引用可以使用替代标记形成:
int and i = 0;
也可以在将物理源线拼接成逻辑源线之后形成:
int &\
& i = 0;
那么为什么以下程序不能编译?
int main() {
int &\
bitand i = 5;
}
基于该标准,我不明白为什么不应该这样做。
我是否错过了其他信息,或者这是编译器错误?
最佳答案
反斜杠+换行符序列是红色鲱鱼。这些东西在标记化阶段(分别是转换的第二阶段和第三阶段)之前被删除。因此,我们可以专注于这些片段:
&&
&bitand
第一行有一个 token
&&
。第二行有两个标记&
和bitand
。最后一个标记等效于&
,因此第二行的行为与包含两个&
标记的行为完全相同。这与一个&&
token 不同。后者由两个&
字符组成,而不是两个&
token 。关于c++ - 为什么未正确地对bitand进行解析以形成右值引用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34541818/