swift運(yùn)算符和c++相同點(diǎn)
swift的位運(yùn)算符和c的意義一樣。
~按位取反
&按位與
|按位或
^按位異或
<<按位左移
>>按位右移
swift的運(yùn)算符優(yōu)先級也和c一樣。
swift運(yùn)算符和c++的不同點(diǎn)
swift沒有++,--單目運(yùn)算符,swift增加了c++沒有的===撬陵、!==等價(jià)運(yùn)算符爽彤,區(qū)間運(yùn)算符...,閉合運(yùn)算符擒权??阁谆;此外碳抄,swift的算術(shù)運(yùn)算符,默認(rèn)情況场绿,不會溢出剖效,如果溢出將會在編譯階段報(bào)錯(cuò)。
? ? swift算術(shù)運(yùn)算不會溢出,但增加了溢出運(yùn)算符
&+溢出加法
&-溢出減法
&*溢出乘法
c++運(yùn)算符重載使用關(guān)鍵子operator來標(biāo)示璧尸,swift沒有特別的關(guān)鍵字咒林。
struct Vector2D {
? ? var x = 0.0,y = 0.0
}
extension Vector2D {
? ? static func + (left: Vector2D, right: Vector2D) -> Vector2D {
? ? ? ? return Vector2D(x: left.x + right.x, y: left.y + right.y)
? ? }
}
let vector = Vector2D(x: 2.0, y: 3.0)
let anotherVector = Vector2D(x: 1.0, y: 0.0)
print(vector + anotherVector)
extension Vector2D {
? ? static prefix func - (vector: Vector2D) -> Vector2D {
? ? ? ? return Vector2D(x: -vector.x, y: -vector.y)
? ? }
}
extension Vector2D {
? ? static func == (left: Vector2D, right: Vector2D) -> Bool {
? ? ? ? return (left.x == right.x) && (left.y == right.y)
? ? }
? ? static func != (left: Vector2D, right: Vector2D) -> Bool {
? ? ? ? return !(left == right)
? ? }
}
extension Vector2D {
? ? static func += (left: inout Vector2D, right: Vector2D) {
? ? ? ? left = left + right
? ? }
}