草庐IT

private_struct

全部标签

c++ - 为什么 Visual Studio 编译器在此示例中允许违反私有(private)继承?

我在VisualStudio2013和2017中发现std::unique_ptr的行为非常奇怪。让我们考虑一个例子:classBase{public:virtual~Base()=default;virtualvoidFoo()=0;};classDerived:privateBase{public:voidFoo()override{std::couta){a->Foo();}Foo(std::unique_ptr(newDerived()));//Compiles请注意,继承是私有(private)的。此示例仅在VisualStudio上编译。而且,虚函数调用是有效的,因为它是公

c++ - 从指向派生对象的基类指针访问派生私有(private)成员函数

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:Whycaniaccessaderivedprivatememberfunctionviaabaseclasspointertoaderivedobject?#includeusingnamespacestd;classB{public:virtualvoidfn1(void){coutfn1();p->fn2();}为什么p->fn2()调用派生类函数,即使fn2在D中是私有(private)的?

c++ - 静态对象的私有(private)析构函数是如何调用的?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Cannotaccessprivatememberinsingletonclassdestructor我正在实现一个单例,如下所示。classA{public:staticA&instance();private:A(void){cout析构函数是私有(private)的。当程序即将终止时,是否会为对象theMainInstance调用它?我在VisualStudio6中试过,它给出了编译错误。"cannotaccessprivatememberdeclaredinclass..."在visualstudio

c++ - std::is_default_constructible<T> 错误,如果构造函数是私有(private)的

我有以下片段#include#includeclassC{C(){}};intmain(){static_assert(!boost::has_trivial_default_constructor::value,"Constructible");static_assert(!std::is_default_constructible::value,"Constructible");}条件不相等,但第一个条件工作正常,第二个构造给出错误,构造函数是私有(private)的。编译器gcc4.7...那么,这是gcc错误,还是由标准定义的?http://liveworkspace.org/

c++ - 如何访问单独类中的私有(private)构造函数?

我正在用C++编写一个库。我的图书馆有两个类(class),A和B.我想隐藏A()引用我的库的任何代码的构造函数。我也要上课B能够调用A()构造函数。我有C#背景,对我的C++内存犹新。在C#中,我将简单地声明A()构造函数为internal.我读过在C++中执行此操作的最接近方法是friend的组合声明和前向声明。我该怎么做呢?下面是我的三个文件:嗯:#pragmaonceclassA{private:A();};B.h#pragmaonceclassA;classB{public:AcreateA();};B.cpp:#include"A.h"#include"B.h"AB::cr

C++:使用int vs struct对静态成员变量进行依赖初始化的静态

给定一个从另一个类的静态成员变量初始化的静态成员变量,非文字structii有时默认初始化为0或到333。这取决于编译或链接顺序。伪代码演示:classStaticClass://file'ONE.cpp/.hpp'staticinti=2staticstructii{inta=333}classABC://file'abc.cpp'staticintabc_i=StaticClass::i//always2staticstructabc_ii=StaticClass::ii//sometimes0,sometimes333调用g++-std=c++11abc.cppONE.cpp&&

c++ - shared_ptr 和私有(private)继承

这是一个说明我遇到的问题的玩具示例。该应用程序是相当无关紧要的(它本质上是一个链表元素,最后具有特殊行为)。我无法使用派生指针构造基类shared_ptr并且由于某种原因与我使用私有(private)继承的事实相关联。#include#include#includeusingnamespacestd;//AnIteminalinkedlistclassA{public://friendclassB;typedefboost::shared_ptrAPtr;A():next_(){}A(APtrn):next_(n){}APtrnext(){returnnext_;}voidsetNex

c++ - 如何在 C++ 中定义另一个类的私有(private)类

是否可以在另一个类中定义一个类私有(private)并将其用于数组?例如:classa{public:private:classb;bmyarray[10];classb{public:b(inta):a_val(a){}private:inta_val;};};忽略公共(public),我的语法有什么问题吗?是否也可以在A中创建一个成员函数来修改b的私有(private)值。例如,myarray[0].a_val=5;如果是这样,这个语法是否也正确? 最佳答案 不,您定义私有(private)嵌套类的语法没问题。尽管其他一些事情是

c++ - 为什么 long long union 成员的对齐比包含的 union/struct 大?这个对吗?

来自thisquestion人们可能会开始相信union的一致性不亚于其个体成员的最大一致性。但是我对gcc/g++中的longlong类型有疑问。可以找到完整的示例here,但这里是我的问题的相关部分:unionull{longlongm;};structsll{longlongm;};intmain(){#definepr(v)cout这会产生以下输出:sizeof(longlong):8__alignof__(longlong):8sizeof(ull):8__alignof__(ull):4sizeof(sll):8__alignof__(sll):4为什么union成员的对齐

c++ - 私有(private)继承的 typedef 对嵌套类的可见性

在下面的示例中(对长度表示歉意)我试图隔离一些我在从另一个私有(private)继承的类中使用嵌套类时遇到的意外行为。我经常看到这样的陈述:与非嵌套类相比,嵌套类没有什么特别之处,但在这个例子中,可以看到嵌套类(至少根据GCC4.4)可以看到一个公共(public)类型定义由关闭类私有(private)继承的类。我明白typdef与成员数据不同,但我发现这种行为令人惊讶,而且我想很多其他人也会这样。所以我的问题是双重的:这是标准行为吗?(对原因的合理解释会很有帮助)能否期望它适用于大多数现代编译器(即它的可移植性如何)?#includeclassBase{typedefintpriv_