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 ...