Re: [問題] C++ for loop 的 string 宣告

看板C_and_CPP作者 (我是胖子)時間13年前 (2012/03/17 21:26), 編輯推噓2(203)
留言5則, 4人參與, 最新討論串2/2 (看更多)
※ 引述《SingleStar (安打星)》之銘言: : 請問以下兩個寫法,是否在記憶體的使用方面,兩者有優劣之分嗎? : 兩者唯一的差別在於 path 宣告的位置不同,path 這個變數在 loop 之後也不會再用到。 : 我自己習慣用 (1),先宣告起來放,不會在 loop 裡面重複宣告 : 可是從建構/解構的角度來看,是不是沒差別呢? : 我的想法如下,煩請大大賜教。 : (1) 先宣告的時候,呼叫了 default 建構子 : loop 每跑一次,path 就做一次 "=" 的運算 : "=" 運算的時候,若原本有資料,則會先呼叫解構子,之後再存入 : 上面這一行,是對的嗎? @@? : (2) loop 每跑一次,path 就先呼叫 default 再做 "=" 的運算,loop 結束則呼叫解構子 : 所以兩個根本沒什麼差,對嗎? : 先感謝大家 ^^ : ----------------------------------------- : (1) : string path; : for( ... ) { : path = string("xxxx") + "zzzz"; : ... : if (xxx) return 1; : } : return 0; : (2) : for( ... ) { : string path = staing("xxxx") + "zzzz"; : ... : if (xxx) return 1; : } : return 0; 這兩個差別很大喔同學 1裡面 path是 全域變數 2裡面 path是 區域變數 你試試看在2改寫成這樣觀察這三次輸出有啥變化 string path=NULL; cout<<path<<endl; for( ... ) { string path = staing("xxxx") + "zzzz"; ... cout<<path<<endl; if (xxx) return 1; } cout<<path<<endl; return 0; -- 雖然我並沒有並沒有一身溫馴的靈魂 但是我很願意很願意做那個永遠照顧妳的人 我的愛人 請聽 我有顆不善言語的心 只能夠看著妳遠去的背影 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 1.169.159.22

03/17 21:34, , 1F
都是區域變數吧...只是原PO把fuction的scope省略了
03/17 21:34, 1F

03/17 21:36, , 2F
對function都是區域變數,對for才有差別
03/17 21:36, 2F

03/17 21:37, , 3F
這都是區域變數阿...同一樓 只差在scope一個在func內
03/17 21:37, 3F

03/17 21:38, , 4F
一個是for loop
03/17 21:38, 4F

03/17 21:47, , 5F
感謝大大解釋,我以修文補充解釋
03/17 21:47, 5F
文章代碼(AID): #1FP93sAK (C_and_CPP)
文章代碼(AID): #1FP93sAK (C_and_CPP)