Eclipse (Luna, 4.4.2) 告诉我以下行有语法错误:
static_cast<Vec<int, DIM>>(a.mul(b));
我记得双右尖括号 >>>
会导致某些编译器出现问题,所以我在中间放了一个空格:>>
。语法错误消失。
但是我的程序中有很多 >>>
没有检测到语法错误,例如:
Node<Element<DIM>> * e= a.get();
为什么在上述特定情况下会出现错误?这不是 error: 'varName' was not declared in this scope 的拷贝,因为我特别询问为什么我的编译器有时会接受 >>>
,但并非总是如此。
最佳答案
您已经使用了 c++11 之前的标准编译器。旧标准在让解析器消除来自 operator>>()
的嵌套模板类型说明符中使用的一对右尖括号 >>
时存在问题。因此你必须在它们之间写一个空格。
像 >>>
或 >>*
这样的示例属于旧解析器的不同情况,因此它们可以正常工作而不会出现错误消息。
我不得不承认,我实际上并不知道在 c++11(当前)标准定义中到底做了什么,这种情况可以被 c++11 兼容的解析器清楚地消除歧义。
关于c++ - 双右尖括号 (>>) 在特定情况下会产生语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29331315/