我需要在Swift中memset一个C结构体吗



AFAIK,在swift中,调用类/结构的默认初始化程序会将所有内容初始化为0nil。在C(例如套接字编程)中,有时memset用于在使用结构之前将所有内容设置为0。我也需要使用swift中的memset吗?还是我写的方式很好?

(顺便说一句,在这种情况下,使用memset是因为hints应该设置为0,除非低于2个参数。当调用getaddrinfo时,非0(垃圾等)会对res产生副作用。

C:

struct addrinfo hints, *res;
int status;
memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
status = getaddrinfo(NULL, MYPORT, &hints, &res);

Swift:

var res = UnsafeMutablePointer<addrinfo>()
var hints = addrinfo()
hints.ai_family = AF_UNSPEC
hints.ai_socktype = SOCK_STREAM
let status = getaddrinfo(nil, MYPORT, &hints, &res)

来自Xcode 6.3发行说明:

导入的C结构现在在Swift中有一个默认的初始值设定项将结构的所有字段初始化为零。

这意味着

var hints = addrinfo()

将CCD_ 7的所有字段初始化为零,并且不需要调用CCD_。

最新更新