< 返回版块

Pslydhh 发表于 2018-05-23 15:59

Tags:数组


struct Node {
	cells: [AtomicPtr; 4],
	next: AtomicPtr>
}

像上面一样的一个数据结构,如何能方便的初始化cells里面的4个AtomicPtr?, 我目前只能用


let node: Node = Node { cells:[AtomicPtr::default(), AtomicPtr::default(), AtomicPtr::default(),AtomicPtr::default()]
				, next: AtomicPtr::default()};

如果是8个,16个,的话怎么办。。。

评论区

写评论
作者 Pslydhh 2018-06-14 18:58

我发现这个写法就可以啦:


let node: Node = Node { cells:unsafe { mem::zeroed() }, 
                       next: AtomicPtr::default()};

@XG.Ley 看了array的文档,它提到:

A repeat expression [x; N], which produces an array with N copies of x. The type of x must be Copy.

要写出[x; N]形式,x必须要是Copy。难怪我试了几个常用类型都成功了。 看来需要其它途径了,例如写个宏?

@Pslydhh 不行,这个写法会报错: the trait bound std::sync::atomic::AtomicPtr<_>: std::marker::Copy is not satisfied

@XG.Ley 初始也可以像struct那样写。 let node = Node { cells: [AtomicPtr::default(); 4] };

XG.Ley 2018-05-24 22:12

看了array的文档,它提到:

A repeat expression [x; N], which produces an array with N copies of x. The type of x must be Copy.

要写出[x; N]形式,x必须要是Copy。难怪我试了几个常用类型都成功了。

看来需要其它途径了,例如写个宏?

@Pslydhh 不行,这个写法会报错:

the trait bound std::sync::atomic::AtomicPtr<_>: std::marker::Copy is not satisfied

@XG.Ley 初始也可以像struct那样写。 let node = Node { cells: [AtomicPtr::default(); 4] };

作者 Pslydhh 2018-05-24 20:42

不行,这个写法会报错:


the trait bound `std::sync::atomic::AtomicPtr<_>: std::marker::Copy` is not satisfied

@XG.Ley 初始也可以像struct那样写。 let node = Node { cells: [AtomicPtr::default(); 4] };

XG.Ley 2018-05-24 19:47

初始也可以像struct那样写。

let node = Node { cells: [AtomicPtr::default(); 4] };
1 共 4 条评论, 1 页