2017-08-11 20 views

Trả lời

6

câu trả lời nhanh; POD loại C++ 's ≈ Rust Copy types.

Tuy nhiên, có một vài khác, khái niệm liên quan. Hãy thảo luận chi tiết về chúng!


Các Copy đặc điểm là gần gũi nhất với thuật ngữ "kiểu POD" trong C++ và được định nghĩa như sau:

loại có giá trị có thể được nhân đôi chỉ đơn giản bằng cách sao chép bit.

Bằng cách "sao chép bit", tài liệu về cơ bản có nghĩa là memcpy(). Điều này bao gồm tất cả các loại nguyên thủy, chẳng hạn như u32, f32, charbool, nhưng người dùng định nghĩa loại có thể Copy, quá. Thông thường các đặc điểm chỉ đơn giản là có nguồn gốc:

#[derive(Clone, Copy)] 
struct Point { 
    x: f32, 
    y: f32, 
} 

Bạn có thể thấy các Clone: các Clone trait là một yêu cầu của Copy và được định nghĩa là:

Một đặc điểm chung cho khả năng rõ ràng trùng lặp một đối tượng.

Clone nói rằng một loại là "bằng cách nào đó có khả năng lặp lại chính nó" và Copy đòi hỏi nhiều bằng cách nói kiểu là "có khả năng lặp lại bản thân bằng cách chỉ cần sao chép bit của loại".


Câu trả lời C++ nói rằng các loại POD không chứa "hàm tạo, hàm hủy và hàm thành viên ảo". Hãy phá vỡ xuống cho Rust:

  • Constructors: Rust không có phương pháp xây dựng chuyên dụng, nhưng thay vì sử dụng các chức năng liên quan (phương pháp tĩnh trong C++). Mỗi loại, thậm chí tất cả các loại Copy, có thể có nhiều hàm và phương thức được liên kết tùy ý. Trong Rust nó không thực sự là một yêu cầu để được "POD". Đặc biệt, ngay cả các kiểu nguyên thủy của Rust cũng có nhiều phương thức, như u32::pow(). Hạn chế này không áp dụng cho Rust.

  • Destructors: ở Rust, các đối tượng được destructed bằng cách gọi drop() từ Drop đặc điểm (hay đúng hơn: drop() được tự động gọi vào cuối phạm vi). Các loại không thể là Copy khi chúng triển khai đặc điểm Drop! Rust có hạn chế tương tự ở đây.

  • Chức năng thành viên ảo: trong Rust, virtual không phải là tài sản của hàm. Hầu hết các chức năng có thể được sử dụng trong ngữ cảnh ảo , có nghĩa là: chúng có thể được sử dụng với công văn động, nhưng là Copy không ngăn loại được sử dụng trong ngữ cảnh công văn động (trong điều khoản Rust: được sử dụng làm đối tượng trait). Điều này một phần là nhờ vptr không được lưu trữ trong loại, nhưng bên cạnh con trỏ tới đối tượng (con trỏ chất béo). Điểm này không áp dụng cho Rust.

Các vấn đề liên quan