精華區beta ck54th329 關於我們 聯絡資訊
用 = 的時候 你是先call ctor製造出一個object 再call operator = 做賦值 由於ctor和oeprator都是func 所以這要兩個func stake call 比起只用一個func call的ctor賦值(就是像int a(1); 這樣) 多花了一個stake call的時間 這裡要解釋一下stake的意思 這種資料結構定義的操作行為是 先進後出 這不就是func的情形嘛! 所以system要用stake管理func的call來call去 管理這個資料結構就是需要效率成本的啦 (畢竟是間接啊) -- ※ 發信站: 批踢踢實業坊(ptt.csie.ntu.edu.tw) ◆ From: 218.160.5.212 > -------------------------------------------------------------------------- < 作者: Upsha (Marin hardtail好棒) 看板: ck54th329 標題: Re: =和ctor賦值的差異 時間: Fri Dec 13 21:55:20 2002 ※ 引述《Upsha (Marin hardtail好棒)》之銘言: : 用 = 的時候 你是先call ctor製造出一個object : 再call operator = 做賦值 : 由於ctor和oeprator都是func : 所以這要兩個func stake call : 比起只用一個func call的ctor賦值(就是像int a(1); 這樣) : 多花了一個stake call的時間 : 這裡要解釋一下stake的意思 這種資料結構定義的操作行為是 : 先進後出 這不就是func的情形嘛! : 所以system要用stake管理func的call來call去 : 管理這個資料結構就是需要效率成本的啦 (畢竟是間接啊) 永任說不是很了 所以我在這寫個虛擬碼看看會不會比較了 class ptr_stake { private: func_ptr ptr_array[40]; int size(0); public: void pop(void) { return ptr_array[size--]; } void push(func_ptr input) { ptrarray[++size] = input; } }; 所以 my_class a = 1; system會展開成 a.myclass(); a.operator=(1); 這其中 系統還要負擔 ptrstake program_stake; program_stake.push(a.myclass); program_stake.pop(a.myclass); program_stake.push(a.operator=); program_stkae.pop(a.operator=); 其實這個有關stake的虛擬碼寫的很不好...@@ 其實在實作上並不是這樣 不過這要懂組語才好說 不過大概可以知道了吧 stake是另外一個很大的成本 這裡會發現我的stake難道不用func stake call嗎(我還是用的member func) 其實在組語層面 有一種更粗糙、基本的stake可以用 不過說了大概也不懂 又要打很多字 雖然這樣的虛擬碼不是很好 不過至少表現出來func call是很費成本的 大概就醬啦 -- ※ 發信站: 批踢踢實業坊(ptt.csie.ntu.edu.tw) ◆ From: 218.160.5.212
Quezacot:你一定要用這麼多專有名詞嗎?-.- 推 61.224.130.41 12/13
> -------------------------------------------------------------------------- < 作者: Upsha (Marin hardtail好棒) 看板: ck54th329 標題: Re: =和ctor賦值的差異 時間: Fri Dec 13 23:01:40 2002 ※ 引述《Upsha (Marin hardtail好棒)》之銘言: : ※ 引述《Upsha (Marin hardtail好棒)》之銘言: : : 用 = 的時候 你是先call ctor製造出一個object : : 再call operator = 做賦值 : : 由於ctor和oeprator都是func : : 所以這要兩個func stake call : : 比起只用一個func call的ctor賦值(就是像int a(1); 這樣) : : 多花了一個stake call的時間 : : 這裡要解釋一下stake的意思 這種資料結構定義的操作行為是 : : 先進後出 這不就是func的情形嘛! : : 所以system要用stake管理func的call來call去 : : 管理這個資料結構就是需要效率成本的啦 (畢竟是間接啊) : 永任說不是很了 所以我在這寫個虛擬碼看看會不會比較了 : class ptr_stake { : private: : func_ptr ptr_array[40]; : int size(0); : public: : void pop(void) { return ptr_array[size--]; } : void push(func_ptr input) { ptrarray[++size] = input; } : }; : 所以 : my_class a = 1; : system會展開成 : a.myclass(); : a.operator=(1); : 這其中 系統還要負擔 : ptrstake program_stake; : program_stake.push(a.myclass); : program_stake.pop(a.myclass); : program_stake.push(a.operator=); : program_stkae.pop(a.operator=); : 其實這個有關stake的虛擬碼寫的很不好...@@ 其實在實作上並不是這樣 : 不過這要懂組語才好說 不過大概可以知道了吧 stake是另外一個很大的成本 : 這裡會發現我的stake難道不用func stake call嗎(我還是用的member func) : 其實在組語層面 有一種更粗糙、基本的stake可以用 : 不過說了大概也不懂 又要打很多字 : 雖然這樣的虛擬碼不是很好 不過至少表現出來func call是很費成本的 : 大概就醬啦 簡而言之啦 就是 因為func call要成本(先不管那是什麼) 所以 可以用一個func call做的好的事 為什麼要用兩個哪?! -- ※ 發信站: 批踢踢實業坊(ptt.csie.ntu.edu.tw) ◆ From: 218.160.18.163 > -------------------------------------------------------------------------- < 作者: Upsha (Marin hardtail好棒) 看板: ck54th329 標題: Re: =和ctor賦值的差異 時間: Fri Dec 13 23:33:11 2002 ※ 引述《Upsha (Marin hardtail好棒)》之銘言: : ※ 引述《Upsha (Marin hardtail好棒)》之銘言: : : 永任說不是很了 所以我在這寫個虛擬碼看看會不會比較了 : : class ptr_stake { : : private: : : func_ptr ptr_array[40]; : : int size(0); : : public: : : void pop(void) { return ptr_array[size--]; } : : void push(func_ptr input) { ptrarray[++size] = input; } : : }; : : 所以 : : my_class a = 1; : : system會展開成 : : a.myclass(); : : a.operator=(1); : : 這其中 系統還要負擔 : : ptrstake program_stake; : : program_stake.push(a.myclass); : : program_stake.pop(a.myclass); : : program_stake.push(a.operator=); : : program_stkae.pop(a.operator=); : : 其實這個有關stake的虛擬碼寫的很不好...@@ 其實在實作上並不是這樣 : : 不過這要懂組語才好說 不過大概可以知道了吧 stake是另外一個很大的成本 : : 這裡會發現我的stake難道不用func stake call嗎(我還是用的member func) : : 其實在組語層面 有一種更粗糙、基本的stake可以用 : : 不過說了大概也不懂 又要打很多字 : : 雖然這樣的虛擬碼不是很好 不過至少表現出來func call是很費成本的 : : 大概就醬啦 : 簡而言之啦 就是 因為func call要成本(先不管那是什麼) : 所以 : 可以用一個func call做的好的事 為什麼要用兩個哪?! 也就是int a(1); 實際上是a.int(1); 只用了一個func call 而 int a = 1; 實際上是 a.int(); a.operator=(1); 用了兩個func call -- ※ 發信站: 批踢踢實業坊(ptt.csie.ntu.edu.tw) ◆ From: 218.160.18.163 > -------------------------------------------------------------------------- < 作者: Upsha (Marin hardtail好棒) 看板: ck54th329 標題: Re: =和ctor賦值的差異 時間: Fri Dec 13 23:47:46 2002 ※ 引述《Upsha (Marin hardtail好棒)》之銘言: : ※ 引述《Quezacot (我還能裝多久?)》之銘言: : 大致上 是的 : 更詳細點的是 : : 所以說 : : int a (1); : : 是開一個空間,存入1,叫做a : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ in one func : : 而 : : int a = 1; : : 是開一個空間叫做a,再存入1 : ^^^^^^^^^^^^^func 1^^^^^^func 2 : : 是醬子嗎? 為什麼c++定義的class沒差呢! 因為 他知道在operator=裡面 只會有賦值的動作 誰知道programmer會不會在裡面做奇怪的事 譬如說 一些物件管理 (不要懷疑 這常有滴) 所以 要養成用ctor賦值的好習慣啊 -- ※ 發信站: 批踢踢實業坊(ptt.csie.ntu.edu.tw) ◆ From: 218.160.18.163 > -------------------------------------------------------------------------- < 作者: Upsha (Marin hardtail好棒) 看板: ck54th329 標題: Re: =和ctor賦值的差異 時間: Sat Dec 14 00:02:48 2002 ※ 引述《Upsha (Marin hardtail好棒)》之銘言: : ※ 引述《Upsha (Marin hardtail好棒)》之銘言: : : 大致上 是的 : : 更詳細點的是 : : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ in one func : : ^^^^^^^^^^^^^func 1^^^^^^func 2 : 為什麼c++定義的class沒差呢! : 因為 他知道在operator=裡面 只會有賦值的動作 : 誰知道programmer會不會在裡面做奇怪的事 譬如說 一些物件管理 : (不要懷疑 這常有滴) : 所以 要養成用ctor賦值的好習慣啊 我太急了 說的明白點 面對內建型別的時候 系統可以預設 int a(1); 和 int a = 1;做的是一樣的事 但是c++既然允許使用者寫自己的operator= 就等於不再保證上面的情形成立了 所以就一定要兩個func call 不能性內建型別一樣預設操作行為適宜一樣的 而將後者寫為前者 -- ※ 發信站: 批踢踢實業坊(ptt.csie.ntu.edu.tw) ◆ From: 218.160.18.163