作者khoguan (Khoguan Phuann)
看板C_and_CPP
標題Re: [心得] pointer, reference, object 及 array …
時間Fri Sep 2 16:40:41 2005
※ 引述《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)
1F:推 cppOrz:呵呵,sorry,我弄錯了,謝謝板大的指正,我把原 59.120.214.120 09/02
2F:→ cppOrz:文改一下 59.120.214.120 09/02
3F:推 khoguan:大大請別客氣。感謝您不吝分享寶貴的知識與經驗220.130.208.167 09/02