friend-function相关内容

命名空间内的友元函数声明/定义

考虑一个命名空间内的类.类的定义声明了一个友元函数. 命名空间 Foo{类酒吧{朋友无效 baz();};} 据我所知,这应该将 baz() 声明为最内层封闭命名空间的成员,即 Foo. 因此,我希望 baz() 的以下定义是正确的: void Foo::baz() { } 但是,GCC (4.7) 给了我一个错误. error: 'void Foo::baz()' 应该在 'Fo ..
发布时间:2022-01-14 23:27:59 C/C++开发

运算符重载:成员函数与非成员函数?

我读到声明为成员函数的重载运算符是非对称,因为它只能有一个参数,而另一个自动传递的参数是 this 指针.所以不存在比较它们的标准.另一方面,声明为 friend 的重载运算符是对称,因为我们传递了两个相同类型的参数,因此它们可以进行比较. 我的问题是,当我仍然可以将指针的左值与引用进行比较时,为什么首选朋友?(使用非对称版本的结果与对称版本相同)为什么 STL 算法只使用对称版本? ..

为什么在没有模板声明的情况下在模板类中包含使用模板参数的友元函数的实现?

给定以下代码. #include 模板Foo类{民众:Foo(const T& value = T());朋友 Foo运算符+ (const Foo& lhs, const Foo& rhs){//...}朋友 std::ostream&运算符 编译器可以轻松编译具有模板参数且没有以下语法的友元函数 template 朋友 Foo运算符+ (const Foo& lhs, con ..
发布时间:2021-09-03 20:38:51 C/C++开发

C++友元函数模板重载和SFINAE在clang++、g++、vc++中的不同行为(C++14模式)

因此,以下代码在 clang++ (3.8.0) 下构建并成功运行,但在 g++ (6.3.0) 和 vc++ (19.10.24903.0) 下均失败.g++ 和 vc++ 都抱怨 operator&& 的重新定义. 有谁知道这里哪个编译器有问题.对于无法编译代码的编译器,编译错误的解决方法是什么? #include #include 模板 等待的结构{朋友可等待operat ..

将命名空间声明为类的朋友

我想知道是否有一种方法可以让我们在一个特定的命名空间 friend 中定义所有函数和一个类? 特别是我有一个类,例如: class C {私人的://...上市://...朋友 C* B::f1(C*);朋友 C* B::f2(C*);朋友 C* B::f3(C*);朋友 C* B::f4(C*);朋友 C* B::f5(C*);}; 和命名空间 B 为: 命名空间 B {C* f1( ..
发布时间:2021-06-07 18:35:14 C/C++开发

仅在(互斥)需求上存在差异,才使隐藏的朋友超负荷工作:法律或违反ODR?

请考虑以下类模板,其中包含相同朋友的两个(隐藏)朋友声明 (相同的函数类型;请参见下文),该模板还定义了朋友(并且朋友是内联的),但定义条件为(互斥) requires-clauses : #includestruct Base {};template结构S:public Base {朋友int foo(Base&)要求(N == 1){return 1; ..
发布时间:2021-04-20 19:04:43 C/C++开发

有什么办法可以声明两个类的共同朋友功能吗?

class CDB;CDM类{上市:朋友国家开发银行CDB :: Add(const CDM&);清洁发展机制添加(const CDB&);};CDB类{上市:国开行添加(const CDM&);朋友CDM&CDM :: Add(const CDB&);}; 这段代码给我错误:错误C2027:使用未定义类型'CDB'.如何解决这个问题. 解决方案 不,您不能这样做.无法消除循环依赖. ..

类定义交叉引用时如何声明朋友方法?

我想定义两个类,A和B.A有一个数据成员,该成员是B类对象,并且在类中进行了初始化. A也有一种方法来检索此B类型数据成员中的值,并且该方法将在B中声明为好友方法.这是我的代码: class A{ public: int getBValue(); private: B b=B(1); }; class B{ public: friend int A::getBVal ..
发布时间:2020-06-15 19:21:26 C/C++开发

不完整类的成员函数作为好友=正式有效吗?

以下代码(其中嵌套类Info将外部类Impl的两个成员函数指定为朋友)使用以下代码在Visual C ++和g ++中很好地编译. 但是,如果没有在Info之前声明成员函数,则g ++会抱怨不完整类,而不是缺少声明: In file included from ../console_io.hpp:6:0, from console_io.cpp:1: ..
发布时间:2020-06-15 19:21:17 C/C++开发