草庐IT

publication

全部标签

c++ - clang:存在公共(public)虚拟继承时无法转换为私有(private)基础

我正在尝试编译以下代码(有点小的示例),文件test.cpp:#include#includeclassShared:publicstd::enable_shared_from_this{public:intprea;};classWidget:publicvirtualShared{inta;public:~Widget(){a=7;}};classContainer:virtualpublicWidget{};classList:privateContainer,virtualpublicWidget{public:intc;};intmain(intargc,char**argv

c++ - 将私有(private)库静态链接到公共(public)库以隐藏符号

关闭。这个问题需要更多focused.它目前不接受答案。想改善这个问题吗?更新问题,使其仅关注一个问题editingthispost.2年前关闭。Improvethisquestion考虑以下:我正在用C++开发一个静态库X,它在内部使用著名的静态库Yv2.0;我只想分发一个库X',即X和Y静态链接/合并以供内部使用;开发人员想在他的可执行文件中使用X';此外,他需要Yv1.0(不是v2.0,就像我一样);Yv1.0和v2.0有一些共同的符号,其中一些共同符号的行为也不同。我开发X时严格要求将Yv2.0用于某些内部业务。这就是说我无论如何都不能恢复到Yv1.0。另一方面,开发者对使用Y

c++ - 空类的默认构造函数是公共(public)的。但是怎么办?

我有一个简单的问题:classmy{};myob;编译器允许我创建一个有意义的对象。而且,我知道您不能在构造函数是私有(private)的情况下创建对象。在我看来,类中的所有内容都是private但显然不是默认构造函数(因为它允许我创建对象,因为默认构造函数应该是public).但是让我感到困惑的是,类中没有public部分。那么,在这种情况下,它创建一个public部分只是为了在它下面放置一个默认构造函数吗?或者有其他事情发生而我的理由不正确?此外,当创建/访问对象时,如何在内部组织/跟踪公共(public)、私有(private)和protected访问?我得到这个问题是因为我直到

c++ - 将 'friend class xxxxx' 放在公共(public)部分还是私有(private)部分会有什么不同吗?

classA1{public:friendclassB;}classA2{private:friendclassB;}有什么不同吗? 最佳答案 不,访问说明符对friend声明没有影响。 关于c++-将'friendclassxxxxx'放在公共(public)部分还是私有(private)部分会有什么不同吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/2722222/

c++ - 在独立类中重新排序公共(public)非虚拟方法是否会破坏 ABI?

更改独立类中公共(public)非虚拟非内联重载方法的顺序是否会破坏ABI?之前:classMyFinalClass{public://...voiddoSomething(charc,inti,intn);voiddoSomething(charc,inti);//...};之后:classMyFinalClass{public://...voiddoSomething(charc,inti);voiddoSomething(charc,inti,intn);//...};谢谢! 最佳答案 函数通过它们的名称和签名链接,而不是通过

c++ - 为什么公共(public)重载与某些编译器上的私有(private) using 指令冲突?

我在我的一个项目中遇到过以下情况,其中基类有一个函数模板,它被派生类模板中的非模板函数隐藏。在类层次结构的更下方,非模板化函数通过using指令显式地将函数引入作用域。这是一个简化的示例代码:classBase{public:templateconstT&get()const;};templateclassDerived:publicBase{private:usingBase::get;public:constT&get()const;};templateclassMoreDerived:publicDerived{public:usingDerived::get;//;神马:htt

c++ - C++ 公共(public) API 的最佳实践是什么?

C++公共(public)API的最佳实践是什么?我正在处理一个具有多个namespace的C++项目,每个namespace都有多个对象。有些对象具有相同的名称,但位于不同的namespace中。目前,每个对象都有自己的.cpp文件和.h文件。我不确定如何表达这个...创建第二个.h文件以仅公开公共(public)API是否合适?它们应该是每个命名空间或每个对象或其他范围的.h文件吗?为C++库创建公共(public)API的最佳实践是什么?感谢您的帮助,陈子 最佳答案 有时在每个.cpp和.h文件对中都有一个类并将namespa

c++ - 当 const 方法是公共(public)的并且非 const 方法受到保护时,为什么 C++ 不强制转换为 const?

我创建了一个类,其中包含两个get方法,一个是常量,一个是非常量。const方法是公共(public)的,因此用户可以查询vector。非常量方法是protected,所以我可以用它来修改我需要的数据。但是,当我尝试使用该类并调用get方法时,编译器提示非常量方法受到保护。相反,我必须使用const_cast将对象转换为const,这样我就可以获得公共(public)方法。有办法解决吗?既然有公共(public)方法,为什么编译器不自己进行转换呢?如果我删除protected版本并只保留const版本,它可以正常工作,所以在这种情况下它确实会执行转换。转换为const总是安全的。它正在

c++ - std::is_constructible on type with non-public destructor

std::is_constructible的预期结果是什么?在具有私有(private)或protected析构函数的类型上?例如,即使只有friend可以释放它,我仍然可以在堆上构造这样一个对象:#includeclassFoo{friendvoidfreeFoo(Foo*);public:Foo(){}private://Destructorisprivate!~Foo(){}};voidfreeFoo(Foo*f){deletef;//deletingafooisfineherebecauseoffriendship}intmain(){Foo*f=newFoo();//dele

c++ - 访问指定为私有(private)的基类的公共(public)静态成员

我正在学习C++。文档learn.microsoft.com/en-us/cpp/cpp/member-access-control-cpp说:Whenyouspecifyabaseclassasprivate,itaffectsonlynonstaticmembers.Publicstaticmembersarestillaccessibleinthederivedclasses.但是,以下代码根据前面引用导致错误C2247的示例稍作调整:'Base::y'notaccessiblebecause'Derived1'uses'private'toinheritfrom'Base'.对