c 不同類的物件之間自動型別轉換有什麼用?

時間 2021-06-01 04:46:35

1樓:Pluto Hades

這設計太有用了好嗎

舉個例子,我定義了幾個類,分別是utf8string,utf16string,utf32string,gb18030string。

寫好自動型別轉換的方法,再過載操作符=

這樣我就能從一種編碼的字串直接構造另一種,還能直接在不同編碼的字串直接互相賦值,多方便

2樓:歐文韜

這個現在似乎都叫隱式型別轉換。按造C++標準,隱式型別轉換只能有一層。

而且這個其實不是型別轉換,而是構造了乙個B型別的臨時物件,建構函式用了B(const A&)。

這個功能在大量使用模板的時候,對型別的判定和包裝的時候特別有用。比如std::bind和std::ref配合使用

3樓:徐辰

這主要還是C的殘餘勢力。

C不是strong type,所以C裡面有一票五光十色的implicit cast,不光有int <-> long之類還算說得過去的,而且還有long <-> pointer之類說不過去的。

C++當時的設計目標之一就是自定義型別要和內建型別有同等地位,所以內建型別能幹的髒活自定義型別也得支援,所以就有了cast constructor和cast operator這些東西。

現在想想其實當年把implicit cast整個砍掉說不定會更好點。

4樓:

本質上程式的執行是為了運算,而不同型別之間不能進行運算,所以運算前必須要轉換成相同型別…所以但凡與需要的型別不同時,都需要轉換…

C 物件型別轉換問題?

C十十20年 參見 C 程式設計精要教程 關於基類和派生類的記憶體布局,基類是派生類一部分。若基類沒有說明為虛基類,則基類位於派生類資料成員的前面,在這種情況下通過static cast等可以完成轉換,但是這導致程式是不安全的,因為當基類物件被作為派生類物件時,顯然其 派生類資料成員 是不存在的,呼...

c語言陣列可以儲存不同型別資料嗎?

乙隻樹 不可以,陣列的元素必須時同一種型別,因為記憶體的分配是按照 單個元素所佔記憶體 元素個數分配的。當然,你的陣列元素可以是不同型別成員組成的乙個結構體型別。 在c 裡可以做到,比如std variantauto printer auto value else ifconstexpr std i...

C語言不同資料型別計算時轉換問題?

薛非 1.m a b 的計算過程中,是將a和b分別轉換為int型,還是將a b的結果轉換為int型?作為右值,所有短於int型別的資料都會被隱式地轉換為int或unsigned 所以m a b 本質上表達的是 m int a int b 這叫整數提公升 integer promotions 2.a ...