gpt4 book ai didi

c++ - 运算符删除关联性

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:10:21 25 4
gpt4 key购买 nike

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

5.3 Unary expressions [expr.unary]

1) Expressions with unary operators group right-to-left

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
* & + - ! ~

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

最佳答案

正如 Barry 所说,优先级由语法决定(有一些运算符并不真正符合优先级的基本概念,因此您只能真正从语法中完全正确地弄清楚发生了什么,而不是优先表)。

即使我们忽略了这一点,但是 delete 的优先级(至少通常)决定了一个语句是否合法/允许,而不是它的含义。举个反例,使用 +*,优先级决定 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

关于c++ - 运算符删除关联性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30360119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com