运算符声明
运算符声明会向程序中引入中缀、前缀或后缀运算符,它使用上下文关键字operator
声明。 可以声明三种不同的缀性:中缀、前缀和后缀。操作符的缀性描述了操作符与它的操作数的相对位置。 运算符声明有三种基本形式,每种缀性各一种。运算符的缀性通过在operator
和运算符之间添加上下文关键字infix
,prefix
或postfix
来指定。每种形式中,运算符的名字只能包含Operators中定义的运算符字符。
下面的这种形式声明了一个新的中缀运算符:
operator infixoperator name
{
previewprecedenceprecedence level
associativityassociativity
}
中缀运算符是二元运算符,它可以被置于两个操作数之间,比如表达式1 + 2
中的加法运算符(+
)。
中缀运算符可以可选地指定优先级,结合性,或两者同时指定。
运算符的优先级可以指定在没有括号包围的情况下,运算符与它的操作数如何紧密绑定的。可以使用上下文关键字precedence
并优先级(precedence level)一起来指定一个运算符的优先级。优先级可以是0到255之间的任何一个数字(十进制整数);与十进制整数字面量不同的是,它不可以包含任何下划线字符。尽管优先级是一个特定的数字,但它仅用作与另一个运算符比较(大小)。也就是说,一个操作数可以同时被两个运算符使用时,例如2 + 3 * 5
,优先级更高的运算符将优先与操作数绑定。
运算符的结合性可以指定在没有括号包围的情况下,优先级相同的运算符以何种顺序被分组的。可以使用上下文关键字associativity
并结合性(associativity)一起来指定一个运算符的结合性,其中结合性可以说是上下文关键字left
,right
或none
中的任何一个。左结合运算符以从左到右的形式分组。例如,减法运算符(-
)具有左结合性,因此4 - 5 - 6
被以(4 - 5) - 6
的形式分组,其结果为-7
。 右结合运算符以从右到左的形式分组,对于设置为none
的非结合运算符,它们不以任何形式分组。具有相同优先级的非结合运算符,不可以互相邻接。例如,表达式1 < 2 < 3
非法的。
声明时不指定任何优先级或结合性的中缀运算符,它们的优先级会被初始化为100,结合性被初始化为none
。
下面的这种形式声明了一个新的前缀运算符:
operator prefix
operator name
{}
紧跟在操作数前边的前缀运算符(prefix operator)是一元运算符,例如表达式++i
中的前缀递增运算符(++
)。
前缀运算符的声明中不指定优先级。前缀运算符是非结合的。
下面的这种形式声明了一个新的后缀运算符:
operator postfix
operator name
{}
紧跟在操作数后边的后缀运算符(postfix operator)是一元运算符,例如表达式i++
中的前缀递增运算符(++
)。
和前缀运算符一样,后缀运算符的声明中不指定优先级。后缀运算符是非结合的。
声明了一个新的运算符以后,需要声明一个跟这个运算符同名的函数来实现这个运算符。如何实现一个新的运算符,请参考Custom Operators。
运算符声明语法
运算符声明 → 前置运算符声明 | 后置运算符声明 | 中置运算符声明
前置运算符声明 → 运算符 prefix 运算符 { }
后置运算符声明 → 运算符 postfix 运算符 { }
中置运算符声明 → 运算符 infix 运算符 { 中置运算符属性 可选 }
中置运算符属性 → 优先级子句 可选 结和性子句 可选
优先级子句 → precedence 优先级水平
优先级水平 → 数值 0 到 255
结和性子句 → associativity 结和性
结和性 → left | right | none
易百教程移动端:请扫描本页面底部(右侧)二维码并关注微信公众号,回复:"教程" 选择相关教程阅读或直接访问:http://m.yiibai.com 。
加QQ群啦,易百教程官方技术学习群
注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。
- Java技术群: 227270512 (人数:2000,免费:否)
- Go开发者群(新): 851549018 (人数:1000,免费)
- PHP开发者群: 460153241 (人数:2000,免费)
- MySQL/SQL群: 418407075 (人数:2000,免费:否)
- 大数据开发群: 655154550 (人数:2000,免费:否)
- Python技术群: 287904175 (人数:2000,免费:否)
- 人工智能深度学习: 456236082 (人数:2000,免费:否)
- 测试工程师群: 415553199 (人数:2000,免费:否)
- 前端开发者群: 410430016 (人数:2000,免费:否)
- C/C++技术群(新): 629264796 (人数:2000,免费)
- Node.js技术群(新): 621549808 (人数:2000,免费)
- PostgreSQL数据库群: 539504187 (人数:1000,免费)
- Linux运维技术群: 479429477 (人数:2000,免费:否)
- Oracle数据库: 175248146 (人数:2000,免费:否)
- C#/ASP.Net开发者: 579821706 (人数:2000,免费)
- 数据分析师群: 397883996 (人数:2000,免费:否)