草庐IT

FHE-friendly

全部标签

c++ - 如何在另一个 C++ 命名空间内的全局命名空间中定义 friend ?

我想在全局命名空间中定义一个二元运算符。运营商适用于在另一个命名空间中定义的类,运算符(operator)应该得到访问该类的私有(private)成员。我的问题是我没有知道如何在类定义中使全局运算符成为friend时对其进行作用域。我尝试了类似的方法:namespaceNAME{classA{public:friendA::operator*(doublelhs,constA&rhs);private:intprivate_var;};}Aoperator*(doublelhs,constA&rhs){doublex=rhs.private_var;...}编译器(g++4.4)不知道

c++ - 嵌套类的类内 friend 是否可以访问外部类成员?

clang++、g++和MSVCdisagreeonthiscode:classA{private:enumclassE{NO,YES};classB{private:friendEf1(){returnE::YES;}//friendEf2();};};//A::Ef2(){returnA::E::YES;}intmain(){}clang++接受所示代码。g++和MSVC在f1中提示那A::E无法访问。如果函数f2未注释,所有三个编译器都在其定义中提示A::E无法访问。是f1实际上有效吗?我找到的相关标准件是:[class.access.nest]:Anestedclassisam

c++ - 运算符中的 friend == 或 << 我应该什么时候使用它?

我觉得我对friend关键字的理解有点坑。我有一门课,presentation。我在代码中将它用于两个变量,present1和present2,我将它们与==进行比较:if(present1==present2)这是我定义运算符==的方式(在classPresentation中):booloperator==(constpresentation&p)const;但是,有人告诉我,使用friend并在类之外定义它会更好:friendbooloperator==(presentation&,presentation&);为什么?两者有什么区别? 最佳答案

c++ - 将一个类成员函数指定为另一个类的 friend ?

根据C++Primer一书,作者提到我们可以将一个类成员函数指定为另一个类的友元,而不是整个类(第634页)。然后,我测试了这段代码:classA{public:friendvoidB::fB(A&a);voidfA(){}};classB{public:voidfB(A&a){};voidfB2(A&a){};};我只是想让fB()成为classA的friend,而不是整个classB。但是上面的代码产生了一个错误:'B':isnotaclassornamespacename。(我使用的是VisualC++2005) 最佳答案 尝

c++ - 将 main 声明为被认为有害的 friend ?

讨论我知道main可以成为class的friend:#includeclassfoo{friendintmain();inti=4;};intmain(){fooobj;std::coutLIVEDEMO然而,我觉得虽然这是完全可以允许的,但它隐藏了许多危险。问题让main成为类(class)的friend有什么有值(value)的用途吗?是否有任何理由将main声明为类的friend应该被视为有害? 最佳答案 如果该功能实际上不合法,则选择使用还是避免使用该合法功能将变得毫无意义。我相信对此存在严重疑问,因为标准说Thefunct

c++ - 非成员非 friend 函数与私有(private)函数

HerbSutter说过,在C++中编写方法最面向对象的方式是使用非成员非友元函数。这是否意味着我应该采用私有(private)方法并将它们转换为非成员非friend函数?这些方法可能需要的任何成员变量都可以作为参数传入。示例(之前):classNumber{public:Number(intnNumber):m_nNumber(nNumber){}intCalculateDifference(intnNumber){returnminus(nNumber);}private:intminus(intnNumber){returnm_nNumber-nNumber;}intm_nNum

c++ - 如何使模板参数的构造函数成为 friend ?

在C++11中,他们可以简单地将模板参数与friendT交friend。.您还可以使用friendT::Method()为该参数中的方法添加好友。.但是,如何为模板参数的构造函数加好友?classBeMyFriend{public:BeMyFriend&operator=(constBeMyFriend&rhs)=default;BeMyFriend(constBeMyFriend&rhs)=default;};templateclassTest{friendT&T::operator=(constT&);//Worksfine,noerrorfriendT::T(constT&);/

c++ - Clang 与 GCC : Friend-ing a global function via qualified/unqualified names

我正在尝试确定是否针对Clang、GCC或两者提交错误报告(我已经针对Clang主干和GCC4.7.2进行了测试:如果有人可以针对GCC主干验证这一点会有所帮助):基本上,在默认和C++11模式下,使用-fsyntax-only可以很好地编译以下代码三行文件:classA{friendvoidf();};请注意,没有事先声明f(),但这显然没问题。但是,Clang(但不是GCC)拒绝以下内容:classA{friendvoid::f();};来自Clang的错误是“在指定范围内找不到类型为'void()'的名为'f'的函数”,但我在标准中找不到任何理由来区别对待这种情况,所以我认为这是

c++ - A<T>的 friend 也可以成为A<A<T>>的 friend 吗?

考虑以下代码:#includetemplateclassContainer;templateContainer>make_double_container(conststd::vector>&);templateclassContainer{std::vectorv;friendContainer>make_double_container(conststd::vector>&);public:Container(){}explicitContainer(std::vectorv):v(v){}};templateContainer>make_double_container(cons

c++ - "friend"一个类是否扩展到该类中声明的类?

我有以下代码,其中A类将B类声明为friend。在B类中声明的C类是否应该能够查看A类的私有(private)声明/成员?使用CL版本16(VisualStudio2010)编译时没有错误,但gccg++版本4.1.1给出错误“typedefintA::Tisprivateinthiscontext”。函数调用作为typedef也会发生相同的行为(这就是我发现差异的方式)。classA{friendclassB;typedefintT;};classB{A::Tt;//oktypedefA::TU;//okclassC{Uu;//okA::Tv;//compileerrorongcc}