Re: [問題] 新手關於 #include 的問題
※ 引述《loveme00835 (朴髮箍)》之銘言:
: // b.cpp
: #include "b.h"
: struct Pimpl
: {
: A a;
: C c;
: D *d;
: // 更多成員 ...
: };
: // 其他實作碼
: void B::do_something()
: {
: objs->c.method();
: objs->d->method();
: }
: 實作碼這時候就會變得複雜, 但是所減少的編譯成本還比你的方法
: 來得多
喔,這個東西不錯!可以視情況加入函式庫裡,
有這麼好用的東西不用也太可惜
: 沒有筆誤, 假如你開發的類別長這樣:
: 然後在使用上:
: 然後我跟你說, 其實 DoSomething 只是將 a 當錯 in parameter,
: DoOtherThing 將 a 當做 out parameter, 而這些在方法名稱上都
: 看不出來, 下面的程式碼較為符合從C語言繼承下來的呼叫習慣
下面一起回
: : 一般的情況下連 string 這種小東西都有人建議多使用 const string &s 取值了
: 這就像我說的
: pointer to non-const & reference to const
: 遠比
: pointer to const & reference to non-const
: 來得好, 不只有你開發端的地方要注意, 客戶的使用也要考慮進來
: , 強迫客戶用 by reference 語法來傳遞引數, 以達成 by value
: 語意是相當不自然的.
: 但是你就算選擇了第一個方案, 還會面臨到介面在呼叫起來不方便
: 的問題, 引數一下要加 &一下又不用加.
: 你改到通通都不加也不是一件好事, 因為這樣就無法一眼就看出函
: 式的行為是何種, 還記得7 +- 2 法則嗎?你讓讀者背的東西愈多,
: 程式碼的品質也愈差.
我不確定你有沒有仔細看完我說的內容,幸好我下面的文你並未刪除
: : 而通常我們都能夠分辨哪些東西是夠小,夠常被存取的東西
: : 哪些東西是很大,我們不常重複的存取整份資料的東西
: : (Managed C++ 把它們分為 value class/ ref class)
: : (或者你也可以用 struct 與 class 區分它們)
: : 而就我的經驗,使用 pointer 的機會應該遠比直接存取變數情況要多得多
: : 當然,那些情況使用 pointer 的效率比較好,程式碼也比較單純
: : 尤其是在使用 vector 將你的 class 裝起來的時候
實際上 pointer to non-const & reference to const
與 pointer to const & reference to non-const
並不是互斥的東西,它們根本不該拿來這樣比較,連分組都錯了
我的意思是,使用 pointer 或者 reference 並不取決於你是否當它是 in or out
一個 reference 與 pointer 使用上有什麼差別?
當 a 是 reference,b 是 pointer
a= 5; // 合理,常出現
c= *b; // 合理,常出現
delete b; // 合理,常出現
delete &a; // ???
使用 pointer 或者 reference,在習慣上意味著 (真要說 C 的習慣的話)
它們所代表的原始資料是在 heap 上或者 stack 上
甚至更極端的,通常只有 string 會使用 reference 表示
(好吧,也許還有 vector 等基礎容器)
也就是說,基本上我們會傾向
不選擇 pointer to non-const & reference to const
也不選擇 pointer to const & reference to non-const
而是選擇 pointer to custom class & reference to stl container
with value to custom struct
而使用上,有 const 不用來表達語意
還要浪費 reference 這個新功能來代表 const 實在是很奇怪
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 175.180.111.210
→
04/09 01:36, , 1F
04/09 01:36, 1F
→
04/09 01:40, , 2F
04/09 01:40, 2F
→
04/09 01:41, , 3F
04/09 01:41, 3F
→
04/09 01:42, , 4F
04/09 01:42, 4F
→
04/09 01:43, , 5F
04/09 01:43, 5F
→
04/09 01:46, , 6F
04/09 01:46, 6F
→
04/09 01:46, , 7F
04/09 01:46, 7F
→
04/09 01:49, , 8F
04/09 01:49, 8F
→
04/09 01:50, , 9F
04/09 01:50, 9F
→
04/09 01:51, , 10F
04/09 01:51, 10F
→
04/09 01:52, , 11F
04/09 01:52, 11F
推
04/09 01:56, , 12F
04/09 01:56, 12F
→
04/09 02:02, , 13F
04/09 02:02, 13F
→
04/09 02:02, , 14F
04/09 02:02, 14F
推
04/09 02:08, , 15F
04/09 02:08, 15F
→
04/09 02:12, , 16F
04/09 02:12, 16F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 7 之 10 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章