我曾经将我的测试类命名为待测试类中的朋友,以便启用测试专用字段。我注意到这个班的名字没有经过验证。这是故意吗?为什么“朋友班”没有被验证存在?
回答
一个朋友类声明一个使用详细类型说明符不合格该类的名称实际上是该类的声明。它引入了该类作为封闭名称空间的成员。它不要求它预先宣布
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