41得票1回答
如何使std::make_unique成为我的类的友元

我希望声明std::make_unique函数为我的类的友元。原因是我想将我的构造函数声明为protected并提供使用unique_ptr创建对象的替代方法。以下是示例代码: #include <memory> template <typename T> clas...

8得票1回答
友元函数的参数相关查找

请看以下内容: 考虑以下情况: namespace N { struct A { }; struct B { B() { } B(A const&) { } friend void f(B const& ) {...

19得票3回答
指向独立函数和友元函数的指针之间的区别

我不明白为什么下面的代码无法编译(例如在gcc 9.10或MS VS C++ 2019中):class X { public: friend bool operator==(int, X const &); }; int main() { 2 == X(); // ...

15得票2回答
A<T>的朋友也可以是A<A<T>>的朋友吗?

请看以下代码: 考虑以下代码: #include &lt;vector&gt; template&lt;typename T&gt; class Container; template&lt;typename T&gt; Container&lt;Container&lt;T&gt;&g...

11得票1回答
复杂的作用域规则在友元声明中是有何意义的?

我最近发现友元声明的作用域遵循极其特殊的规则-如果您对未经声明的函数或类进行了friend声明(定义),它会自动在最近封闭的命名空间中进行声明(定义),但是它对非限定和限定查找不可见; 但是,友元函数声明通过参数相关查找仍然可见。struct M { friend void foo()...

7得票4回答
两个类可以共享一个友元函数吗?

今天我对友元函数有一个疑问。 两个类可以拥有相同的友元函数吗? 例如,在A类和B类中声明friend void f1();是否可行?如果可以,函数f1()能否访问这两个类的成员?

12得票5回答
如何在命名空间中声明一个以内部类作为参数的友元函数?

考虑下面的代码:namespace foo {} class A { class B { }; friend int foo::bar( B&amp; ); }; namespace foo { int bar( A::B&amp; ) { } ...

83得票15回答
你在什么情况下会使用友元函数而不是静态成员函数?

当我们希望一个非成员函数访问类的私有成员时,我们将其声明为该类的友元函数。这使得它具有与静态成员函数相同的访问权限。无论哪种方式,你都可以获得一个与该类的任何实例都没有关联的函数。 什么情况下必须使用友元函数? 何时必须使用静态函数? 如果两者都可以解决问题,如何权衡它们的适用性?默认情况下...

149得票2回答
运算符重载:成员函数 vs 非成员函数?

我读到过,将重载运算符声明为成员函数是不对称的,因为它只能有一个参数,而自动传递的其他参数是this指针。因此,不存在标准来比较它们。另一方面,作为friend声明的重载运算符是对称的,因为我们传递了两个相同类型的参数,因此它们可以进行比较。 我的问题是,当我仍然可以将指针的lvalue与引...

8得票3回答
如何从友元函数访问受保护的构造函数?

我创建了一个类,希望强制任何试图构造对象的人使用unique_ptr。为此,我考虑将构造函数声明为protected,并使用一个friend函数返回一个unique_ptr。以下是我想要做的示例: template &lt;typename T&gt; class A { public: ...