作者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