c++ - C++ 中::运算符的规则

标签 c++ language-lawyer

我认为 :: 运算符在访问全局范围的情况下可以是一元的。在所有其他情况下,:: 被视为二元运算符,:: 运算符的评估规则在 N1::N2::N3 的情况下::n 等同于以下内容:

((N1::N2)::N3)::n // Error: ::n has not been declared

但该行无法编译。它很好奇。标准中没有关于 nested-name-specifier 评估的任何信息。如果 nested-name-specified 的求值等同于 qualified/unqualified-id 是很自然的,但它并没有在标准中的任何地方说明这一点。 那么我们是否可以假设 nested-name-specifier 的计算是依赖于实现的?

最佳答案

[expr.prim.general] (5.1.1/8-9)::的解析规则被列为。它需要 ::后跟命名空间/类的名称或命名空间/类的成员的名称。 ()不允许。

更具体地在[over.oper] (13.5/1) 标准定义operator-function-idoperator作为new之一, delete , + , - , ! , = , ˆ= , &= , <= , >= , () , [] , new[] , * , < , |= , && , delete[] , / , > , << , || , % , += , >> , ++ , ˆ , -= , >>= , -- , & , *= , <<= , , , | , /= , == , ->* , , %= , != , -> .

. , .* , :: , ?:在第 9 条中被命名为不作为普通一元或二元运算符的异常(exception)。

关于c++ - C++ 中::运算符的规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24016605/

相关文章:

c++ - 什么标准条款强制执行这种左值到右值的转换?

c++ - C++ 中顶点/边的 VTK 自定义 ID

c++ - 堆栈分配数组的安全分配

c++ - 如何计算 Eigen VectorXi 中交集和并集的元素数量?

c++ - SSE 规范化比简单近似慢?

c++ - 非原子变量的障碍和同步点 - 数据竞争?

c++ - 将 const 分配给 constexpr 变量

c++ - 函数本地静态互斥锁线程安全吗?

c++ - 在 C++0x 中优化掉一个 "while(1);"

c++ - 左值引用绑定(bind)