草庐IT

GLIBC_PRIVATE

全部标签

c++ - 多重继承使私有(private)成员可访问

classA{public:inta;};classB:privateA{};classC:publicA{};classD:publicB,publicC{D(){B::a=0;}};即使B私下继承了A,也可以编译。如果我删除D对C的继承,编译器会说a不可访问,正如我所期望的那样。那么C的继承是否混淆了我的编译器?编译器是gcc4.4.7 最佳答案 看起来像一个真正的编译器错误,因为标准不允许这样的访问11.2Accessibilityofbaseclassesandbaseclassmembers在标准本身之外寻找证据,Whoz

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++ - 静态成员初始化期间访问私有(private)静态函数

我有一个带有静态成员的类。这将使用同一类的私有(private)静态函数进行初始化。#include#includeclassA{public:staticstd::stringconsts;private:staticstd::stringmake(){return"S";}};std::stringconstA::s=A::make();intmain(){std::cout我的问题是:由于哪条规则允许这样做?显然注释部分不起作用,因为不允许我从类外访问私有(private)函数。那么为什么私有(private)静态成员在启动时的初始化是一个特例呢?(附带说明:这条规则的目的是什么

c++ - 声明自身 (*this) 私有(private)的类以避免竞争条件/放弃 gcc 中线程私有(private)的请求

我想避免并行代码中的竞争条件。问题是我的类包含几个全局变量,为了简单起见,我们只说一个x以及一个我希望并行的for循环。实际代码还有一个方法,它接受一个指向类的指针,在本例中是它本身,作为它的参数,访问更多的全局变量。因此,将整个实例设为threadprivate可能是有意义的。我正在使用OpenMP。一个最小的工作示例是:#include#includeclasslotswork{public:intx;intf[10];lotswork(inti=0){x=i;};voidaddInt(inty){x=x+y;}voidcarryout(){#pragmaompparallelfo

c++ - std::unordered_map::emplace 问题与私有(private)/删除的复制构造函数

以下代码可以在gcc4.7.2(mingw)中正常编译#include#includestructtest{test()=default;private:test(testconst&)=delete;};intmain(){std::unordered_mapmap;map.emplace(std::piecewise_construct,std::forward_as_tuple('a'),std::forward_as_tuple());}如果我将test中的复制构造函数从test(testconst&)=delete;更改为test(testconst&)=default;但是

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++ - 公共(public)变量和私有(private)变量的命名约定?

把m_varname当public用同一个类用variable当private是不是错了 最佳答案 一些问题:为什么要有公共(public)变量?以_和__开头的标识符是为系统库保留的。在实践中,这通常并不重要,但很高兴知道。话虽如此,创建命名约定并没有错,无论它看起来如何。只要保持一致即可。 关于c++-公共(public)变量和私有(private)变量的命名约定?,我们在StackOverflow上找到一个类似的问题: https://stackover

C++ 外部类访问内部类的私有(private) - 为什么禁止

你好我想知道为什么C++标准允许我们在嵌套类中访问外部类的私有(private)字段,而它禁止从外部类访问内部类的私有(private)字段。我明白,这个例子:classOuterClass{public:classInnerClass{public:voidprintOuterClass(OuterClass&outer){cout很好,因为内部类有时会很复杂。但我认为以下情况也可以:classAlgorithm{public:classAlgorithmResults{public:voidreadAlgorithmResult();private:voidwriteAlgorit

c++ - 为什么 == 重载可以访问参数的私有(private)成员

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:whyprivatevalueoftheobjcanbechangedbyclassinstance?考虑以下(部分)代码:classGroup{private:intid;public:voidset_id(int);intget_id();booloperator==(constGroup&);};boolGroup::operator==(constGroup&g){if(g.id==this->id){/*idisprivate?*/returntrue;}returnfalse;}代码编译并且结果似

c++ - 为什么不使用私有(private)基地的类型转换运营商?

在此代码中,分配给b1有效,但它不允许分配给b2(有或没有静态转换)。我实际上是在尝试解决相反的问题,公共(public)继承但不隐式转换为基础。但是,似乎从未使用过cast运算符。这是为什么?structB{};structD1:privateB{operatorB&(){return*this;}B&getB(){return*this;}};structD2:publicB{explicitoperatorB&(){return*this;}};structD3:publicB{operatorB&()=delete;};voidfunB(B&b){}intmain(){D1d1