我曾經將我的測試類命名爲待測試類中的朋友,以便啓用測試專用字段。我注意到這個班的名字沒有經過驗證。這是故意嗎?爲什麼「朋友班」沒有被驗證存在?
回答
一個朋友類聲明一個使用詳細類型說明符不合格該類的名稱實際上是該類的聲明。它引入了該類作爲封閉名稱空間的成員。它不要求它預先宣佈
class C
{
friend class X; // OK, introduces '::X'
};
但是,如果你在一個朋友類聲明中使用合格的名字,它會受到正規合格的名稱查找。它必須引用先前聲明的名稱
class X {};
class C
{
friend ::X; // OK, refers to '::X'
friend ::Y; // Error, no '::Y' in sight
};
所以,如果你想成爲「驗證其存在」的類名,在朋友的聲明使用合格的名稱。
這是故意嗎?
我這麼認爲。這很像前向聲明。
通常friend
類需要友好類的完整聲明,但反之亦然。
要強制檢查的存在(聲明)類型可以使用
class MyClass {
friend FriendClass;
};
作爲一個方面說明:
如何重構大多不恰當的朋友模式,我建議你閱讀我的Q &一個帖子:How can I remove refactor a «friend» dependency declaration properly?
你可以說'朋友X;'而不是'朋友類X',然後它需要先前的聲明。也許這會幫助OP。 – bogdan
@bogdan有趣的。我沒有意識到這種語法的微妙之處。 –
如果我正在閱讀標準的權利(** [dcl.type.elab] **),這是因爲聲明工作由'class'完成,而'friend'只是一個修飾符。稍後在** [class.friend] **註釋11中提到了一些關於我在我的腦海中進行的範圍的警告。 – user4581301
想象一下,是否需要朋友類存在。你將如何構建你的代碼?爲了測試你的代碼中有你的朋友聲明。當你建立你的發貨版本時,你不會發布測試代碼,所以你必須刪除好友聲明並重建所有東西。現在您的代碼與您測試的代碼不同。
查看bogdan和AnT的回覆。否則我不會堅持朋友。在開發階段,調試/發佈解決方案也可以做。像斷言。 – katang
- 1. 朋友班'沒有成員名爲''
- 2. 爲什麼C#中沒有朋友類?
- 3. 班級未被識別爲朋友
- 4. 爲什麼我的證書沒有被驗證?
- 5. 是班級自動成爲朋友
- 6. 爲什麼好友類用於驗證?
- 7. Rails的驗證,以確保用戶沒有朋友自己
- 8. 沒有請求朋友列表的Facebook身份驗證
- 9. SQL表爲朋友,共同朋友,朋友朋友等
- 10. 爲什麼jquery驗證沒有運行?
- 11. 爲什麼我的bean驗證消息沒有被拾取?
- 12. 爲什麼:如果沒有被ActiveRecord驗證識別?
- 13. 帶模板班朋友的班級模板,這裏究竟發生了什麼?
- 14. 什麼是朋友ostream
- 15. FBWebDialog沒有朋友列表
- 16. 爲什麼我的一個班輪沒有被執行
- 17. 爲什麼我的班級沒有被打電話?
- 18. 爲什麼這個朋友功能無法訪問班級的私人成員?
- 19. asp.net mvc3,爲什麼dataannotation驗證沒有驗證器屬性?
- 20. 爲什麼密碼驗證存在被忽略?
- 21. 爲什麼我不能在另一個班級的私人成員的班級中申報朋友?
- 22. 用戶和朋友權限沒有顯示在驗證對話框中
- 23. 我們怎樣纔能有朋友宣言「朋友精心製作的班級名稱」作爲例子在c + +?
- 24. '朋友'在Obj c做什麼?
- 25. 朋友沒有出現在GameKit沙盒
- 26. 有什麼方法可以獲取朋友或朋友的朋友的聊天數據嗎?
- 27. Facebook - 計數#朋友的朋友有
- 28. 爲什麼這個朋友不能訪問私有變量?
- 29. 爲什麼這個xhtml不會被驗證? W3C驗證器
- 30. FQL沒有返回所有的朋友
*「我曾經爲了測試私人領域而將我的測試班作爲朋友在課堂上進行測試。」* - 這是一個可怕的想法。測試不能破壞封裝。 –
聲明*創建*名稱。他們不檢查名稱的存在。 –
你能舉一個你有什麼樣的例子,你認爲哪一部分不應該工作? – NathanOliver