xem xét mã:Tại sao Hộp <trait> có kích thước khác với Hộp <struct>?
use std::boxed::Box;
use std::mem::transmute;
trait Total {
fn total(&self) -> i32;
}
#[derive(Debug)]
struct S {
a: i32,
b: i32,
c: i32,
}
impl S {
fn new() -> S {
S { a: 2, b: 3, c: 4 }
}
}
impl Total for S {
fn total(&self) -> i32 {
self.a + self.b + self.c
}
}
fn main() {
let b: Box<Total> = Box::new(S::new());
unsafe {
let s: Box<S> = std::mem::transmute(b);
println!("S = {:?}", s);
}
}
này cung cấp cho các lỗi:
error[E0512]: transmute called with differently sized types: Box<Total> (128 bits) to Box<S> (64 bits)
--> src/main.rs:30:29
|
30 | let s: Box<S> = std::mem::transmute(b);
| ^^^^^^^^^^^^^^^^^^^
Cho rằng Box<Total>
là thực sự là một Box<S>
, tại sao chúng ta nhận được lỗi này?
Đã 'để b: Hộp' ý của bạn là gì? –
Aurora0001
Tôi đã xóa [câu hỏi thứ hai và dường như ít quan trọng hơn] (http://meta.stackexchange.com/q/39223/281829). – Shepmaster