在C++中,术语POD类型用于描述仅包含原始旧数据的类型。 Quoted from here:Rust中有POD类型的概念吗?
一个没有构造函数,析构函数和虚拟成员函数的类。
Rust中是否存在类似的概念?
在C++中,术语POD类型用于描述仅包含原始旧数据的类型。 Quoted from here:Rust中有POD类型的概念吗?
一个没有构造函数,析构函数和虚拟成员函数的类。
Rust中是否存在类似的概念?
快速回答; C++的POD类型≈Rust的Copy
types。
但是,还有一些其他的相关概念。让我们详细讨论它们!
的Copy
性状在C最接近于术语“POD类型” ++和定义如下:
类型,其值可以通过复制位简单地重复。
通过“复制位”,文档基本上是指memcpy()
。这包括所有基元类型,例如u32
,f32
,char
和bool
,但用户定义的类型也可以是Copy
。通常的特点是简单衍生:
#[derive(Clone, Copy)]
struct Point {
x: f32,
y: f32,
}
你可能已经注意到了Clone
:在Clone
trait是Copy
要求,并定义为:
的明确复制能力的一个共同特点一个东西。
Clone
说,一个类型是“在某种程度上能够复制自身”和Copy
需要更多的说的类型是“能够通过仅仅复制型的位复制本身”。
C++答案指出POD类型不包含“构造函数,析构函数和虚拟成员函数”。让我们打破下来生锈:
构造:铁锈没有专门的构造方法,而是使用相关功能(在C静态方法++)。每种类型,即使是所有类型,都可以拥有尽可能多的相关功能和方法。在Rust这并不是真正的“POD”要求。特别是,即使Rust的原始类型也有很多方法,如u32::pow()
。此限制不适用于Rust。
析构函数:拉斯特,目的是通过从Drop
性状主叫drop()
破坏(或更确切地说:drop()
自动在范围结束调用)。 当他们实现Drop
特性时,类型不能为Copy
! Rust在这里有类似的限制。
虚拟成员函数:拉斯特,虚拟不是一个函数的性质。大多数函数都可以在虚拟环境中使用,即:它们可以与动态分派一起使用,但是Copy
不会阻止某个类型在动态分派上下文中使用(以Rust术语:用作特征对象)。这部分要归功于vptr没有存储在类型中,而是指向对象的指针(胖指针)。这一点不适用于Rust。