操作员删除关联性

OMG*_*chy 5 c++ operators

在维基百科上查找运算符关联性时,我注意到它delete具有从右到左的关联性.来源被引用为msdn,我检查了它,它来自第3组优先级,从右到左的关联性.所以我检查了C++标准(n4296)

5.3一元表达式[expr.unary]

1)表达与一元运算符组从右到左

unary-expression:
    postfix-expression
    ++ cast-expression
    -- cast-expression
    unary-operator cast-expression
    sizeof unary-expression
    sizeof ( type-id )
    sizeof ... ( identifier )
    alignof ( type-id )
    noexcept-expression
    new-expression
    delete-expression
unary-operator: one of
    * & + - ! ~
Run Code Online (Sandbox Code Playgroud)

这有什么影响?什么delete有任何关联性?

Jer*_*fin 6

正如Barry所说,优先级由语法决定(并且有一些运算符与优先级的基本概念不太匹配,所以你只能从语法中找出完全正确的结果,而不是优先级表) .

然而,即使我们忽略了这一点,只删除的优先级(至少通常是)确定一个语句是合法/允许的,而不是它的意思.给出一个反例,用+*,优先级确定2 * 3 + 4产生10而不是14(即乘法优先).

在这种情况下delete,由于delete语句没有产生任何值,所以delete x + y;不允许简单的语句.它将被解析为(delete x) + y;,但由于delete x不会产生可以添加到其他任何内容的值,因此结果始终被禁止(如果您更改运算符,那么它将保持为真).

相关性并不真正有意义delete.特别是,关联性处理的是:是否a @ b @ c会将其解析为(a @ b) @ ca @ (b @ c)(@某些运算符在哪里).这对于那些采用两个操作数的运算符来说真的很有意义.没有办法以delete一种允许你提出关联性回答的问题的方式来组合s.