草庐IT

Human-friendly

全部标签

c++ - is_constructible 和 is_destructible 不受 friend 声明的影响

在评估std::is_constructible和std::is_destructible时,Clang和GCC似乎不遵守friend声明。关于`is_constructible,cppreference.comsays:AccesschecksareperformedasiffromacontextunrelatedtoTandanyofthetypesinArgs.Onlythevalidityoftheimmediatecontextofthevariabledefinitionisconsidered.(该站点没有解释is_destructible如何处理访问检查,但访问修饰符

c++ - C++ 标准库必须支持对 friend 是谁挑剔的类吗?

这个问题最容易用一个例子来说明,所以这里是:像下面这样的代码是否保证有效,并且可以正确编译和运行?(并不是所有的实现都能正确地编译它,但我想知道这是否是一个错误。)#includeclassPicky{friendPicky*std::copy(Pickyconst*,Pickyconst*,Picky*);Picky&operator=(Pickyconst&){return*this;}public:Picky(){}};intmain(){Pickyconsta;Pickyb;std::copy(&a,&a+1,&b);return0;} 最佳答案

c++ - 更改 CMAKE_CXX_FLAGS_DEBUG 和 CMake 中的 friend 的默认值

我想在CMake中更改CMAKE_CXX_FLAGS_RELEASE或CMAKE_CXX_FLAGS_DEBUG的默认值。基本上,我有一些项目默认值与CMake的默认值略有不同(例如,发布),我不必问自己“哦,当添加add_compile_options时,他们的-O3或我们的-O2是否优先。”现在,我知道如何设置这些值,但我不知道如何通过两种常用方式让用户可以编辑它们:通过在命令行上使用-DCMAKE_CXX_FLAGS_DEBUG=yourflags或通过使用ccmake或CMakeSetup配置它。问题是CMAKE为这些设置和缓存了自己的默认值,如果您尝试在不使用FORCE的情况

c++ - 当你是 friend 时,为什么 GCC 不允许从私有(private)嵌套类继承?

问同样的问题:为什么GCC允许从私有(private)嵌套类继承?对于非模板类,它允许从私有(private)嵌套类继承,如果它是一个friend,但不是模板类。是错误吗?templateclassInheritFromBaseMember:publicBase::MemberPrivate//error{usingPrivateMember=typenameBase::MemberPrivate;//worksfine};classMyBase{friendclassInheritFromBaseMember;//anothertrytodeclareitfriendtemplate

c++ - "friend struct A;"和 "friend A;"语法有什么区别?

做和做有什么区别:structA;structB{friendstructA;};和structA;structB{friendA;};第二部分省略struct是什么意思? 最佳答案 不同的是,如果你写friendA;,A必须是一个已知的类型名,也就是说它必须在之前声明。如果你写friendstructA;,这本身就是A的声明,所以不需要事先声明:structB{friendstructA;};//OK虽然有一些微妙之处。例如,friendclass/structA在类B的最内层封闭命名空间中声明类A(感谢CaptainObvlio

c++ - 一个类的方法中的本地类是这个类的 friend 吗?

我有一个外部类A。它有一个方法A::fun。在这个方法中,它有一个本地或内部类B。我的问题是:B是A的friend吗?我认为不是。这样对吗?如果是这样,我认为让B类成为A的friend是非常有益的,因为B可以访问A's私有(private)和protected成员。而且,由于B在方法中是本地的,其他人无法访问它,因此作为A的友元是安全的。如何让B访问A的私有(private)和protected成员? 最佳答案 不,他们不是friend。但是局部类对函数外部的名称具有与函数本身相同的访问权限。标准说:9.8Localclassdec

C++ 全局外部 "C" friend 无法访问命名空间类上的私有(private)成员

请考虑代码:#includeusingnamespacestd;extern"C"voidfoo(void);namespaceA{templateclassBar{private:friendvoid::foo(void);staticvoidprivate_func(intn);};templatevoidBar::private_func(intn){cout::private_func("::private_func(1);}intmain(){coutG++给出:>g++-Wall-oextern_cextern_c.cppextern_c.cpp:Infunction‘vo

c++ - 无法与 typedef 成为 friend : any particular reason?

structA{};typedefAB;structC{friendstructB;};GCC4.7.020110427告诉我error:usingtypedef-name'B'after'struct'.到目前为止,这似乎是不言自明的;毕竟,我的示例代码试图声明并加好友struct称为B,实际上不是struct-key.但是,我必须写friendstructA;如果A实际上是一个复杂的、冗长的模板元黑客,这是不可取的。我是不是遗漏了什么,或者我们实际上可以不friend通过类型别名类型?如果不是,是否有任何特殊原因或者只是语言的怪癖?Thisquestion之前提出过这个问题,但是已

c++ - 有类(class)的 friend 但不能访问私有(private)成员

友元函数应该可以访问一个类的私有(private)成员吧?那么我在这里做错了什么?我已经将我的.h文件包含在运算符#includeusingnamespacestd;classfun{private:inta;intb;intc;public:fun(inta,intb);voidmy_swap();inta_func();voidprint();friendostream&operator 最佳答案 在这里...ostream&operator你需要ostream&operator(我被这件事折磨了无数次;你的运算符重载的定义与声

c++ - friend 访问 protected 嵌套类

我有以下C++代码:classA{protected:structNested{intx;};};classB:publicA{friendclassC;};classC{voidm1(){B::Nestedn;//orA::Nested}};用g++4.4编译这个片段,无论我在m1中使用B::Nested还是A::Nested都没有区别。Clang接受B::Nested,但如果我接受A::Nested,则不会编译。这是g++还是clang中的错误? 最佳答案 根据标准,GCC是正确的,Clang是错误的。它说在11.2/4Amem