草庐IT

default-public

全部标签

C++ [[gnu::visibility ("default")]] 与 Windows 和 Linux 上的 __declspec(dllexport)

我需要用C++创建一些共享库,我使用linux作为我的开发者操作系统。我知道如果我想通过dlsym/LoadLibrary加载它们,我需要让符号可见。所以在Linux中,我所有的符号都遵循这种模式:extern"C"[[gnu::visibility("default")]]voidf();我在启用C++11的情况下使用了clang,并且能够在我的主机程序中加载f。当我转移到Windows时,我使用启用了C++11的GCC4.8.2,并且该模式在Windows机器上也适用于LoadLibrary。(我需要使用C++11来实现新的属性语法)。我知道在Windows上我需要使用__decl

C++:私有(private)嵌套类类型的公共(public)成员

我有以下代码:classBase{private:classNestedBase{public:voidDo(){}};public:NestedBasenested;};intmain(){Baseb;b.nested.Do();//lineAcompilesBase::NestedBaseinstance;//lineBdoesn'tcompile}NestedBase类是Base的私有(private)嵌套类,因此B行不编译似乎很自然。但是,另一方面,变量b有公共(public)成员nested,我可以从外部调用它的方法Do()>Base(如A行)。在这种情况下,规范对私有(pr

c++ - 判断模板参数包中 "optimal"公共(public)数值类型

在模板参数包中确定常见数字类型的最佳方法是:最小尺寸,没有精度损失,并且将参数包中的任何类型转换为这种“理想”通用类型时没有上溢/下溢的风险吗?可变参数模板(best_common_numeric_type)可以像这样使用:templateautosome_numeric_func(constNumericTypes&...)->typenamebest_common_numeric_type::type;并有像下面这样的实例化:[1]best_common_numeric_type::type=double[2]best_common_numeric_type::type=unsig

c++ - 为什么即使不调用公共(public)复制构造函数也需要它?

拥有一个公共(public)拷贝构造函数将使这个小程序编译,但不显示副作用“复制”。#includeclassX{public:X(int){std::cout 最佳答案 您已经使用了所谓的“复制初始化”(在[decl.init]中定义)。定义的意思是使用int构造函数构造一个X类型的临时对象,然后使用复制构造函数从临时对象中初始化x。但是,在这种情况下,该标准还允许称为“复制构造函数省略”(在[class.copy]中定义)的优化。如果应用该优化,则没有临时的。x是使用int构造函数构造的,就好像您编写了所谓的“直接初始化”Xx(

c++ - 虚继承应该写 "public virtual"还是 "virtual public"?

基于http://en.wikipedia.org/wiki/Virtual_inheritanceclassAnimal{...};//TwoclassesvirtuallyinheritingAnimal:classMammal:publicvirtualAnimal{...};我还看到书籍使用以下语法,classMammal:virtualpublicAnimal{...};问题>哪个是C++标准?谢谢 最佳答案 来自ISO/IEC14882:2003(E)-10.1可以在类定义中使用以下符号指定基类列表:base-claus

c++ - 在 =delete 的含义中使用 =default

下面的代码编译的很好:structB{B(int){}};structD:B{D()=default;};直到我必须创建类D的实例:Dd;//error:useofdeletedfunction'D::D()'是否有任何理由(用例)允许D的构造函数使用=default,而实际上它的工作原理是=delete;? 最佳答案 g++在错误中给出了很好的解释:bla.cpp:6:5:note:‘D::D()’isimplicitlydeletedbecausethedefaultdefinitionwouldbeill-formed:D()

c++ - 为什么我不能将 =default 用于带有成员初始值设定项列表的默认 ctors

考虑以下类:classFoo{inta,b;public:Foo():a{1},b{2}{}//Defaultctorwithmemberinitializerlist//Foo():a{1},b{2}=default;//Doesnotworkbutwhy?};(编辑:因为在几个答案中提到了它-我知道类内成员初始化器,但这不是这里的重点)我认为第二个ctor定义会更优雅并且更适合现代C++代码(另请参见whyyoushoulduse=defaultifyouhavetobeexplicitaboutusingthedefaultsemantics)。但是,似乎没有通用编译器接受它。c

C++ - 构造函数重载 - 私有(private)和公共(public)

你能告诉我为什么下面的代码会给我以下错误-重载“C(int)”的调用不明确我认为由于C(charx)是私有(private)的,所以只有C(float)ctor从外部可见,应该通过将int转换为float来调用它。但事实并非如此。classC{C(charx){}public:C(floatt){}};intmain(){Cp(0);} 最佳答案 ScottMeyer在“EffectiveC++”中对此进行了讨论。这是模棱两可的原因是他们想确保仅仅改变成员的可见性不会改变其他地方已经存在的代码的含义。否则,假设您的C类位于某个标题中

C++:公共(public)静态成员函数如何访问私有(private)实例成员变量?

我正在编写一个C++类来将文件中的输入读取到称为“block”的预分配缓冲区中。我希望调用者能够调用名为GetNextFilledChunk()的公共(public)静态Chunk类方法,该方法从非事件block池中获取一个block使用Chunk的私有(private)成员变量/函数从输入流填充Chunk实例返回一个指向block的指针给调用者但是第2步让我感到不适。无论我尝试过什么,尝试访问Chunk实例的私有(private)成员变量/函数都会导致g++4.2.1发出错误。这是头文件中的一段类定义:classChunk{public:Chunk();...staticChunk*

c++ - 没看懂Stroustup先生建议删除抽象类Shape的copy default和move操作

我试图理解作者在他的新书(TCPL第4版)中3.3.4SuppressingOperations中的建议,但无济于事。书摘Usingthedefaultcopyormoveforaclassinahierarchyistypicallyadisaster:Givenonlyapointertoabase,wesimplydon’tknowwhatmembersthederivedclasshas(§3.3.3),sowecan’tknowhowtocopythem.So,thebestthingtodoisusuallytodeletethedefaultcopyandmoveoper