在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。