[問題] const 函數回傳問題

看板C_and_CPP作者 (尹烜)時間10年前 (2013/09/09 03:50), 編輯推噓0(0033)
留言33則, 5人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) DEV C++ 問題(Question): 我有下面的這一段程式碼 const vector<OPERATION*> &getOperation() const { return Operation; } 希望回傳的vector<OPERATION*>只能讀取 如果是用 vector<OPERATION*> const &op(application->getOperation()); 這樣去接的話, op就不能在push_back其他的資料,會因為const 而被擋下來 可是我發現可以用 vector<OPERATION*> op(application->getOperation()); 這樣去接, 就導致op可以在push_back其他的資料。 請問有辦法要求 接收的是第一種模式嗎? 謝謝大家 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.66.32

09/09 04:50, , 1F
直覺上你必須多一個中介層把 member 都設為 const 做同樣效果
09/09 04:50, 1F

09/09 04:51, , 2F
我目前為止不知道怎麼強迫回傳值是 const. 希望有人說看看?
09/09 04:51, 2F

09/09 04:51, , 3F
第二種接法是複製一份 vector 出來, 改 op 不會動到Operation
09/09 04:51, 3F

09/09 04:53, , 4F
啊. 剛睡醒說錯了. 不是回傳值. 我是說強迫宣告 const 變數
09/09 04:53, 4F

09/09 09:16, , 5F
三樓正解
09/09 09:16, 5F

09/09 09:17, , 6F
我剛剛測試一下,原來第二種不會改到內部的資料!!!
09/09 09:17, 6F

09/09 09:18, , 7F
謝謝!! 這樣就有一種可以保護裡面資料的感覺!!
09/09 09:18, 7F

09/09 09:18, , 8F
謝謝大家的解答,謝謝!!
09/09 09:18, 8F

09/09 10:02, , 9F
如果你目的是保護的話, 這邊傳指標可能會有問題?
09/09 10:02, 9F

09/09 10:03, , 10F
當然這要看你要保護什麼 XD
09/09 10:03, 10F

09/09 12:06, , 11F
Operation的資料都設在private裡頭,會想回傳指標是
09/09 12:06, 11F

09/09 12:07, , 12F
節省空間,但是本身也想保護vector<Operation*> 所以才
09/09 12:07, 12F

09/09 12:07, , 13F
會想這樣做
09/09 12:07, 13F

09/09 12:09, , 14F
但是你這樣如果對 op 的元素 (例如 op[0]) 指向的 Operation
09/09 12:09, 14F

09/09 12:10, , 15F
做修改的時候, 應該會改到 private 的資料?
09/09 12:10, 15F

09/09 12:55, , 16F
我意思是應該要改成 vector<const Operation *> 之類的嗎?
09/09 12:55, 16F

09/09 13:06, , 17F
了解,不過因為我還是要動到Operation裡面的某個變數
09/09 13:06, 17F

09/09 13:07, , 18F
所以 我不能設成 const Operation
09/09 13:07, 18F

09/09 13:07, , 19F
謝謝!
09/09 13:07, 19F

09/09 13:10, , 20F
那這樣的話, getOperations() 設成 const 成員通常不是好主意
09/09 13:10, 20F

09/09 13:16, , 21F
不過又扯遠了 XD. 抱歉
09/09 13:16, 21F

09/09 13:29, , 22F
我先講我的資料結構好了
09/09 13:29, 22F

09/09 13:30, , 23F
class OPERATION 另外一個 CLASS APPLICATION
09/09 13:30, 23F

09/09 13:31, , 24F
APPLICATION 有一個 private的 vector<OPERATION*>
09/09 13:31, 24F

09/09 13:31, , 25F
沒關係, 其實我大概了解你的寫法:)
09/09 13:31, 25F

09/09 13:31, , 26F
OK =) 謝謝=)
09/09 13:31, 26F

09/09 13:33, , 27F
如果你覺得 const Application a; 可以對這個 a 去修改
09/09 13:33, 27F

09/09 13:34, , 28F
Operation 的內容的話, 我覺得就無所謂~
09/09 13:34, 28F

09/09 13:35, , 29F
(註:const Application a;) 是要表達 a 是 const APPLICATION
09/09 13:35, 29F

09/09 13:40, , 30F
不過我說的 Operation 跟 OPERATION 好像有點混淆 Q_Q
09/09 13:40, 30F

09/09 21:42, , 31F
了解,我試看看好了XD 謝謝=)
09/09 21:42, 31F

09/09 22:46, , 32F
可以參考stl的const iterator是怎麼做的
09/09 22:46, 32F

09/10 11:15, , 33F
好! 謝謝!
09/10 11:15, 33F
文章代碼(AID): #1IBDKFqu (C_and_CPP)