看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《cppOrz (cppOrz)》之銘言: : 二、「value 語義」 : 這是一種屬於高級(高階)的功能,指的是物件本身或其所參照的物件, : 具有「直接指派(賦值)」的能力。 : C 的內建型別,除了 array 之外,都具有 value 語義,但對用戶自訂的 ^^^^^^^^^^^^^^ : 結構,則並不支援(但用戶自訂結構仍具有 pass by value 的語義)。 ^^^^^^^^^^^^^^^^ : 在 C++ 中,用戶自訂型別的 value 語義是透過編譯器預設(或用戶自己 : 實作)的 operator= 來實現。 對這一點我感到疑惑耶。若以是否能「直接指派」來說,對於 user-defined struct object, C 是有支援的。 #include <stdio.h> struct S { int a[3]; }; int main() { struct S s1 = { {1, 2, 3} }; struct S s2; s2 = s1; /* assign 沒問題 */ printf("%d, %d, %d\n", s2.a[0], s2.a[1], s2.a[2]); return 0; } 用這種方法來包裝 array 也可在 C 達到將整個 array 傳進函式, 或從函式中傳出(一般少有人這麼做的原因,是效率考量)。這是 cppOrz 大大提到的 pass by value 語義。 : 除了承襲 C 的 pass by value 特性之外,一個 C++ object(或說 C++ class) : 是否帶有 value 語義,端視用戶的決定/實現。(C struct instance 則不帶有 ^^^^^^^^^^^^^^^^^^^^^^^^^^ : value 語義) ^^^^^^^^^^ 同上。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ※ 編輯: khoguan 來自: 220.130.208.167 (09/02 16:43)
cppOrz:呵呵,sorry,我弄錯了,謝謝板大的指正,我把原 59.120.214.120 09/02
cppOrz:文改一下 59.120.214.120 09/02
khoguan:大大請別客氣。感謝您不吝分享寶貴的知識與經驗220.130.208.167 09/02