草庐IT

Private_dirty

全部标签

c++ - 使用私有(private)继承的限定名行为

在msvc中编译以下示例时,我得到'Interface'notaccessiblebecause'Base'uses'private'toinheritfrom'Interface'在标有错误的行中。当对foo的调用使用相同类型的类型别名进行限定时,它将起作用。我用msvc和ideone进行了测试。为什么两个调用不相等?structInterface{};templatestructBase:privateT{voidfoo(){}};usingBaseX=Base;classDerived:Base{Derived(){Base::foo();//ErrorBaseX::foo();

c++ - 单元测试 - 设置私有(private)成员以获得所需的对象状态

我正在迈出单元测试的第一步,但遇到了封装问题。我的类有一些私有(private)成员变量不应该对客户端可见,但为了让我将对象置于我想要测试它的状态,我需要设置这些私有(private)变量。假设我有这样的代码:ClassFoo{public:intaction();private:intstate;};intFoo::action(){if(this->state==1)return1;elsereturn0;}所以现在我想测试Foo::action(),但我需要能够设置Foo::state以便能够在不同的情况下检查功能场景。一种解决方案是在测试代码中使用邪恶的“definepriva

c++ - 为什么 C 样式转换允许您转换为私有(private)基类?

这个问题在这里已经有了答案:CanIcastaderivedclasstoaprivatebaseclass,usingC-stylecast?(3个答案)关闭6年前。假设我们有这段代码classA{public:A():x(1){}virtual~A(){}intx;};classB{public:B():y(2){}virtual~B(){}voidg(){cout(this);p->g();}};intmain(){Cc;((B*)&c)->g();return0;}main函数中的C风格转换无法用C++转换(static_cast、dynamic_cast、reinterpre

c++ - 为什么 Qt 使用 d_func() 来实例化一个指向私有(private)数据的指针?

考虑以下Qt类:#includeclassMyClassPrivate;classMyClass{public:MyClass();~MyClass();private:QScopedPointerd_ptr;Q_DECLARE_PRIVATE(MyClass)}这个类类似于大多数实现私有(private)实现的Qt类的结构。宏Q_DECLARE_PRIVATE将导致以下扩展(从Qt5开始):inlineMyClassPrivate*d_func(){returnreinterpret_cast(qGetPtrHelper(d_ptr));}inlineconstMyClassPriv

c++ - 指针在 OpenMP 并行部分中是私有(private)的吗?

我已将OpenMP添加到现有代码库中,以便并行化for循环。在parallelfor区域的范围内创建了几个变量,包括一个指针:#pragmaompparallelforfor(inti=0;imyfunc();lm->anotherfunc();[....]}在生成的输出文件中,我注意到不一致,可能是由竞争条件引起的。我最终通过使用ompcritical解决了竞争条件。不过,我的问题仍然存在:lm是每个线程私有(private)的,还是共享的? 最佳答案 是的,在OpenMP区域内声明的所有变量都是私有(private)的。这包括指

c++ - 当复制构造函数是私有(private)的且未实现时是否允许 RVO?

假设我有一个类,其中复制构造函数是私有(private)的并且未实现(使对象不可复制)classNonCopyable{//whateverprivate:NonCopyable(constNonCopyable&);voidoperator=(constNonCopyable&);};现在在同一个类的一些成员函数中,我编写了返回该类对象的代码:NonCopyableNonCopyable::Something(){returnNonCopyable();}这是RVO可以启动的情况。RVO仍然要求复制构造函数是可访问的。由于对复制构造函数的可能调用是从同一个类成员函数中完成的,因此复制

c++ - 为什么模板化的派生类可以在 gcc 上访问其基私有(private)成员?

我正在学习C++。现在我明白派生类不能访问其基类的私有(private)成员,但为什么模板化的可以?例如这样的东西很好用:classbase{staticintx;};templateclassderived:publicbase{Tt;public:voidsetx(inti){x=i;}intgetx(){returnx;}};我在Linux上使用gcc5.4。 最佳答案 这是GCC的一个已知错误,它似乎无法在模板中正确执行访问检查。参见Bug58740.不幸的是,它仍然没有修复。顺便说一句:Clang未能按预期编译。

C++ 处理特定的 impl - #ifdef vs 私有(private)继承 vs 标签调度

我有一些类实现了一些我有的计算针对不同的SIMD实现进行优化,例如阿尔托和上海证券交易所。我不想用#ifdef...#endif污染代码块对于我必须优化的每种方法,所以我尝试了其他几种接近,但不幸的是,我对它的转变方式不太满意出于我会尽力澄清的原因。所以我正在寻找一些建议关于如何改进我已经完成的工作。1.粗略的不同实现文件包括我有相同的头文件,描述了不同的类接口(interface)纯C++、Altivec和SSE的“伪”实现文件仅用于相关方法://Algo.h#ifndefALGO_H_INCLUDED_#defineALGO_H_INCLUDED_classAlgo{public:

c++ - 为什么访问类的私有(private)变量与访问结构的变量一样高效?

我实现了一些主要数据结构是树的算法。我用一个类来表示一个节点,用一个类来表示一棵树。因为节点经常更新,所以我调用了很多setter和getter。因为我多次听说函数调用很昂贵,所以我在想,也许如果我用结构体来表示节点和树,它会使我的算法在实践中更有效率。在这样做之前,我决定进行一个小实验,看看是否确实如此。我创建了一个类,它有一个私有(private)变量、一个setter和一个getter。我还创建了一个也有一个变量的结构,没有setter/getter,因为我们可以通过调用struct.varName来更新变量。以下是结果:运行次数就是我们调用setter/getter的次数。下面

c++ - 为什么我不能分配具有已删除或私有(private)析构函数的类的数组?

这个问题在这里已经有了答案:Dynamicallocationofclassarraywithprotecteddestructor(3个答案)Whatdestructorsarerunwhentheconstructorthrowsanexception?(3个答案)关闭5年前。我最近在工作中遇到了这个问题。我正在使用的库使用引用计数对象并实现了自己的处理方式。部分实现是库的每个类都有一个私有(private)析构函数。我猜这是为了防止在堆栈上创建对象,因为库会自动管理对象的生命周期(它是一个场景图)。无论如何,我想在堆上分配一个这样的类的数组,遇到了以下问题:#includeusi