作者milochen (作事专心很重要)
看板Programming
标题[问题] 物件的explicit copy及assignment operator
时间Wed Jan 17 15:39:29 2007
以下是C++的问题…
我写一个 class C
假设这class C是有实现 copy constructor 及 assignement operator
那麽当我们要作 explicit copy时, (就是 C a = b;)
会自动呼叫copy constructor (就是指呼叫 C::C(const C& rhs) )
而要作assigment operator时, (就 是 a=b;)
会自动呼叫assignment operator (就是指呼叫 C& operator=(const C& rhs)
这是在class C 有实作 copy constructor与 assignment operator时是这样子的状况
但今天如果 class C 长的如下面这样子,我们知道它没有
去实现copy constructor 与 assignment operator
class C{
public:
C(){}
}
我是用g++ 3.3.5去作compile的
当我写程式写
C c=a; 或者是 C a; c=a; 的时候
程式仍然可以动。
第一个问题是,当我没有在class C实现这些动作的时候
我的C c=a 是不是也应该可以叫作 explicit copy?
然後c =a 也可以叫 assignment operator吗??
我编译是会过,但问题就出在,我不知道这时候的情况下
到底 C c=a 跟 c=a 这两行程式,它实际上作了什麽事 >"<
但我满想了解这其中到底是什麽却又找不出答案来。
所以 在此跟版上的大大请教,
感谢^^
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.114.71.92
※ 编辑: milochen 来自: 140.114.71.92 (01/17 15:39)
1F:推 march20:好怪,我只听过 explicit copy constructor 71.137.4.118 01/17 16:06
2F:推 march20:没听过 "explicit copy" 这个 term @@ 71.137.4.118 01/17 16:06
3F:推 march20:你从哪看来的啊 XD 71.137.4.118 01/17 16:07
4F:推 march20:你说的其实应该叫 "initialization" 71.137.4.118 01/17 16:15
5F:推 march20:through declaration 71.137.4.118 01/17 16:15
6F:推 march20:另外对等的 case, 应该叫 71.137.4.118 01/17 16:16
7F:推 march20:"explicit assignment" 71.137.4.118 01/17 16:16
8F:推 UNARYvvv:没有自己实作的话,就是进行bitwise copy 61.228.215.210 01/17 16:30
9F:推 march20:不是 compiler 自己生成一个, 然後对各 71.137.4.118 01/17 17:12
10F:推 march20:member 做 copy 吗? 71.137.4.118 01/17 17:13
11F:推 milochen:Explicit copy我是从C++ FAQs 2ed看来的 140.114.71.92 01/17 17:21
12F:→ milochen:在书里FAQ 20.07里面提到的 140.114.71.92 01/17 17:23
13F:→ milochen:它说copy constructor只会在 140.114.71.92 01/17 17:23
14F:→ milochen:passed by value, returned by value, or 140.114.71.92 01/17 17:23
15F:→ milochen:explicitly copied的时候被呼叫到 140.114.71.92 01/17 17:24
16F:推 milochen:嗯,两种情形都是一个一个copy的,谢谢 140.114.71.92 01/17 18:29