二元运算符' +'不能适用于两个' int2'操作数。需要使用'& +'

时间:2016-03-22 17:13:35

标签: swift simd

我正在尝试将一些代码从Objective-C转换为Swift并遇到这种情况:

import simd

let a = int2(1, 0)
let b = int2(0, 1)

print(a + b) // COMPILER FAILS
print(a &+ b) // SUCCESS

为什么将完全可理解的语法改为这种神秘的符号?

2 个答案:

答案 0 :(得分:7)

关于Swift 2的Xcode 7发行说明:

  

SIMD改进:现在仅在simd模块中使用整数向量类型   使用& +,& - 支持使用环绕语义的未经检查的算术,   和& *运算符,以便更好地支持机器模型   向量。 +, - 和*运算符在整数向量上不可用,   和Xcode自动建议用包装替换它们   运算符。

(来自https://developer.apple.com/library/ios/releasenotes/DeveloperTools/RN-Xcode/Chapters/xc7_release_notes.html

这种不寻常的语法特别明确表示添加是使用未经检查的算法完成的。

答案 1 :(得分:1)

取出你的Swift书,找出a + b和a& + b之间的区别为普通整数。

现在你正在使用矢量。没有SIMD操作具有与+相同的语义。它可以构建,但是你会抱怨它有多慢。然而,SIMD操作具有与& +相同的语义。