右值引用可以使用替代标记形成:

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/

10-11 16:34