差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
wiki:reference:grammar:expression:main_page [2021/06/15 16:32] – [3.3.3 特殊运算符] rendwiki:reference:grammar:expression:main_page [2021/06/16 10:57] (当前版本) – [3.6 Lambda 表达式] rend
行 7: 行 7:
 **表达式**由操作数和运算符组成 **表达式**由操作数和运算符组成
  
-//操作数 运算符 操作数//+''操作数 运算符 操作数''
  
 一般,含左右两个操作数的运算符是**二元运算符** 一般,含左右两个操作数的运算符是**二元运算符**
行 13: 行 13:
 含一个操作数的运算符是**一元运算符** 含一个操作数的运算符是**一元运算符**
  
-二元运算符有结合律,左结合顺序为从右向左,右结合顺序为从左向右+二元运算符有**结合律**左右结合之分
  
-所有的运算符都有优先级,优先级越高越先计算+所有的运算符都有优先级,**优先级越高越先计算**
  
 <html> <html>
 <div style=" border-style: solid; border-color: #d1f4ff; background-color: #ecfcff; border-width: medium; border-radius: 3px; padding: 12px;"> <div style=" border-style: solid; border-color: #d1f4ff; background-color: #ecfcff; border-width: medium; border-radius: 3px; padding: 12px;">
-**注意对于递增、递减、赋值等会修改操作数的运算符,要求表达式的计算结果可被修改,不能是表达式计算中产生的中间临时量或常量**+注意对于递增、递减、赋值等会修改操作数的运算符,要求表达式的计算结果可被修改,不能是表达式计算中产生的中间临时量或常量
 </div> </div>
 </html> </html>
行 42: 行 42:
 ==== 3.2.1 new 表达式 ==== ==== 3.2.1 new 表达式 ====
  
-<code c++>+<code java>
 new 表达式 new 表达式
 </code> </code>
行 50: 行 50:
 表达式的计算结果需要是一种类型 表达式的计算结果需要是一种类型
  
-此对象将会遵从''RAII原则''自动回收+此对象将会遵从**RAII 原则**自动回收
  
 ==== 3.2.2 gcnew 表达式 ==== ==== 3.2.2 gcnew 表达式 ====
  
-<code c++>+<code java>
 gcnew 表达式 gcnew 表达式
 </code> </code>
行 62: 行 62:
 表达式的计算结果需要是一种类型 表达式的计算结果需要是一种类型
  
-此对象将会由垃圾回收器自动回收+此对象将会由**垃圾回收器**自动回收
  
 ===== 3.3 二元运算符 ===== ===== 3.3 二元运算符 =====
行 84: 行 84:
 |  //表达式// **&&** //表达式//  |  7  |  右  |  对两侧表达式进行与运算,若左侧为假则停止求值  | |  //表达式// **&&** //表达式//  |  7  |  右  |  对两侧表达式进行与运算,若左侧为假则停止求值  |
 |  //表达式// **and** //表达式//  |  :::  |  :::  |  :::  |  |  //表达式// **and** //表达式//  |  :::  |  :::  |  :::  | 
-|  //表达式// **\\** //表达式//  |  6  |  右  |  对两侧表达式进行或运算,若左侧为真则停止求值  |+|  //表达式// **||** //表达式//  |  6  |  右  |  对两侧表达式进行或运算,若左侧为真则停止求值  |
 |  //表达式// **or** //表达式//  |  :::  |  :::  |  :::  | |  //表达式// **or** //表达式//  |  :::  |  :::  |  :::  |
 ==== 3.3.2 左结合运算符 ==== ==== 3.3.2 左结合运算符 ====
行 96: 行 96:
 |  //表达式// **%=** //表达式//  |  1  |  左  |  对数值进行数学取余运算后再赋予左边  | |  //表达式// **%=** //表达式//  |  1  |  左  |  对数值进行数学取余运算后再赋予左边  |
 |  //表达式// **^=** //表达式//  |  1  |  左  |  对数值进行数学幂运算后再赋予左边  | |  //表达式// **^=** //表达式//  |  1  |  左  |  对数值进行数学幂运算后再赋予左边  |
-=== 3.3.2.1 绑定 ===+===  3.3.2.1 绑定 === 
  
-//待绑定对象// **:=** //表达式//+<code java> 待绑定对象 := 表达式 </code>
  
 在这里,待绑定对象必须是**右值**,具体来说就是: 在这里,待绑定对象必须是**右值**,具体来说就是:
  
-1. 变量 +  - 变量 
- +  容器中的元素 
-2. 容器中的元素+\\
  
 == 变量的演变 == == 变量的演变 ==
  
-<code javascript>+<code python>
 # 绑定至变量 # 绑定至变量
 a := b a := b
行 114: 行 114:
 c := arr[0] c := arr[0]
 </code> </code>
 +\\
  
 == 引用的退化 == == 引用的退化 ==
  
-<code javascript+<code python
-# 绑定至自身的克隆 +a := clone(a) # 绑定至自身的克隆 
-a := clone(a) +a := new array # 绑定至新内存区块
-# 绑定至新内存区块 +
-a := new array+
 </code> </code>
 +\\
 +
 ==== 3.3.3 特殊运算符 ==== ==== 3.3.3 特殊运算符 ====
  
行 135: 行 136:
 逗号表达式将遵循从左到右的规则,其值为最后一个表达式的值 逗号表达式将遵循从左到右的规则,其值为最后一个表达式的值
  
-数组在访问时,若下标越界会自动增长,增长的部分填''0'';若下标为负意为**倒序访问元素**(基于尾部以绝对值为偏移量访问),哈希表在访问时若映射不存在则将自动建立到''0''的映射+数组在访问时,若下标越界会自动增长,增长的部分填''0'';若下标为负则访问下标为长度-下标绝对值的元素,哈希表在访问时若映射不存在则将自动建立到''0''的映射
  
 展开表达式的使用范围**仅限**函数调用时的参数列表和数组字面量的声明中 展开表达式的使用范围**仅限**函数调用时的参数列表和数组字面量的声明中
行 190: 行 191:
 \\ \\
  
-===== 3.6 Lambda 表达式 =====+===== 3.6 lambda 表达式 =====
  
-**定义一个Lambda 表达式:**+**定义一个lambda 表达式:**
  
 <code c++> <code c++>
行 200: 行 201:
 参数列表中的参数只能指定名称,参数名不可重复,各参数之间以逗号分隔 参数列表中的参数只能指定名称,参数名不可重复,各参数之间以逗号分隔
  
-''Lambda'' 表达式是一种匿名函数,调用 ''Lambda'' 表达式将计算表达式的值并返回+**lambda** 表达式是一种匿名函数,调用 **lambda** 表达式将计算表达式的值并返回
  
-编译器会为 ''Lambda'' 表达式插入一个隐式的''self''参数用于表示自身+编译器会为 **lambda** 表达式插入一个隐式的 **self** 参数用于表示自身
  
-''Lambda'' 表达式也可以使用[[reference.function#A6.2|可变参数]]+**lambda** 表达式也可以使用[[wiki:reference:grammar:function:main_page#6.2 可变参数|可变参数]]