语句

  • 语句结尾的分号是可以省略的。
  • 不支持do while语句和goto语句,其他和C++一致。
  • switch语句不支持自动贯穿,如果想贯穿需要用fallthrough关键字
switch (i) {
    case 1:
        fallthrough
    case 2:
        printf("%d\n", i)
}

Unsafe

在unsafe块中解引用裸指针

var p: *Int
...
unsafe {
    var i = *p
}

Unsafe 函数必须在unsafe块中调用

unsafe fun foo() { ... }

fun main() {
    unsafe {
        foo()
    }
}

表达式

  • 除了位运算的优先级外其他和C/C++相同,位运算优先级高于等于运算符。
if (i & Mask != 0) {}
//same as
if ((i & Mask) != 0) {}
  • 只支持++i,不支持i++

With块

with块不是C++的命名初始化, 它可以包含任何语句.

struct A {
    var i: Int
    fun init() { ... }
}

var a  = A { .init(); .i = 0 }
var a: own* A = new A { .i = 0 }

指针访问

指针也通过.来访问,不用->

var a: A
var b: own* A
a.foo()
b.foo()

类型转换和判断:

as表达式用来做动态类型转换和数字类型转换。

var a = p as own* A
var b = p is own* A

其他类型转换使用unsafeCast函数来完成。