Ich beabsichtige, die folgende Struktur mit einfachen numerischen Typen wie i32
, usize
zu verwenden, aber in der Implementierung der Methode zwingt Rust mich, Clone
anstelle einer impliziten Kopie zu verwenden ("kann nicht ausgeliehenen Inhalt").Welche Eigenschaft teilt dem Compiler mit, dass `T` ein einfacher Typ mit impliziter Kopie ist?
Ich habe keine Eigenschaft gefunden, die dem Compiler sagen würde, dass T
einfacher Typ mit impliziter Kopie ist. Kann ich auf den Compiler zählen, dass der Aufruf clone()
für numerische Typen ohne Leistungseinbußen verworfen wird?
pub struct Rect<T> {
pub x: T,
pub y: T,
pub w: T,
pub h: T,
}
impl<T> Rect<T> where T: PartialOrd + Add<T, Output=T> + Clone {
pub fn contains(&self, x: T, y: T) -> bool {
x >= self.x && y >= self.y
&& x < self.x.clone() + self.w.clone()
&& y < self.y.clone() + self.h.clone()
}
}
AFAIK entspricht, was Sie gesagt haben über 'clone' ist nicht wahr. Es gab einen RFC, der erforderte, dass sie den gleichen Effekt haben, wenn sie beide implementiert sind, aber es gibt nichts, was besagt, dass der Compiler * den Aufruf von "clone" durch eine Bitkopie ersetzen muss. Im Idealfall wird sich der Optimierer darum kümmern, aber auch das ist nicht * garantiert *. –