題:
使用結構和類時有哪些開銷和其他注意事項?
Cybergibbons
2014-03-07 18:29:32 UTC
view on stackexchange narkive permalink
嵌入式系統上的

C傳統上使用結構來保存結構化數據。

Arduino將C ++引入了表,因此我們可以改用類。

可以說我們有兩個不同的類可以認為非常相似的數據結構:

  typedef struct {int valueOne; int valueTwo; int valueThree;} value_t;  

and:

  class Value {public:int valueOne; int valueTwo; int valueThree;}  

在內存方面,這會有什麼不同?

我仍然看到大量使用struct技術-為什麼這樣做?

如果我正確記得我的C ++,除了默認可見性之外,`struct`和`class`之間沒有區別
我認為使用struct主要是因為大部分嵌入式硬件都是用C編碼的,因此,花很多時間為小型MCU編寫代碼的人可能比C ++更好地了解C,並自動達到C ++習語之前的C習語。這是一個“程序員”性能問題。
五 答案:
ratchet freak
2014-03-07 20:41:46 UTC
view on stackexchange narkive permalink

摘自何時應在C ++中使用類與結構?

C ++中類與結構之間的唯一區別是結構具有默認的公共成員和基數,而類具有默認的私有成員和基數。類和結構體都可以混合使用公共成員和私有成員,可以使用繼承,還可以具有成員函數。

我建議將結構體用作沒有任何類類功能的普通數據結構,

在內存方面,訪問修飾符沒有區別,並且鑑於Arduino的內存限制,人們不太可能在以下情況下使用類:複雜的層次結構,但還是喜歡POD結構。

Peter Bloomfield
2014-03-07 20:53:46 UTC
view on stackexchange narkive permalink

與C不同,C ++中 struct 的實例是一個與 class 實例完全相同的對象。從編譯代碼的角度來看,它們是相同的。內存使用情況,對齊方式,訪問時間等完全相同(即沒有開銷)。

從程序員的角度來看,有很小的不同。默認情況下, struct 的成員具有公共可見性,而默認情況下, class 的成員具有私有可見性。否則,所有語言功能在兩者上的作用都相同,例如構造函數/析構函數,繼承,多態性,模板和運算符重載。您甚至可以從 class 派生 struct ,反之亦然。

儘管相似,看到人們故意使用還是很常見的C ++中的> struct 用於非常簡單的結構,例如它僅由幾個數據成員組成,但沒有功能。 class 將用於更複雜的事情。不過,這純粹是出於慣例或個人喜好,可以用作結構預期復雜性的微妙指示。

microtherion
2014-03-07 21:29:42 UTC
view on stackexchange narkive permalink

正如其他答案所指出的那樣,您特定的 struct class 在性能上是無法區分的(由於類型的不同,類型名稱的範圍略有不同。您定義了結構)。 C ++中的劃界不是在 struct class 之間,而是在 POD(普通舊數據)類型和非 POD類型之間此討論中解釋。

Mud
2014-03-20 02:35:17 UTC
view on stackexchange narkive permalink

就內存而言,這會有什麼不同?

無。結構和類是同一件事,僅在保護級別上有所不同,實例化一個都創建了一個“對象”。

如果您不想隱藏數據成員,請減少鍵入。

codah
2014-03-20 02:20:24 UTC
view on stackexchange narkive permalink

請注意

  typedef struct {...} Foo;  

在C ++中已過時,您應該只使用

  struct Foo {...};  

答案中不是很清楚,但是struct的其他作用是默認情況下是公共繼承,而默認情況下是帶有類的私有繼承。 / p>

就像其他人提到的那樣,通常使用struct來定義POD類型。

從技術上講,“ struct vs object”也應該是“ struct vs class”(如實例化struct或class仍然給出一個對象)。

編輯問題對象->類。


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...