草庐IT

CONSTRUCTOR

全部标签

c++ - 继承构造函数和大括号或等于初始值设定项

我不明白为什么你不能编译一个类,它既有一个成员(不是默认可构造的),也有一个大括号或相等的初始值设定项和一个继承的构造函数。g++说:test.cpp:22:15:error:useofdeletedfunction‘Derived::Derived(float)’Derivedd(1.2f);test.cpp:16:13:note:‘Derived::Derived(float)’isimplicitlydeletedbecausethedefaultdefinitionwouldbeill-formed:usingBase::Base;test.cpp:16:13:error:no

c++ - 将默认构造函数添加到基类会更改派生类型的 sizeof()

这个问题在这里已经有了答案:Whenextendingapaddedstruct,whycan'textrafieldsbeplacedinthetailpadding?(4个答案)关闭4年前。我倾向于认为我对C++内部结构和内存布局有很好的掌握,但这个让我感到困惑。我有以下测试代码:#includestructFoo{//Foo(){}intx;chary;};structBar:publicFoo{charz[3];};intmain(){printf("Foo:%uBar:%u\n",(unsigned)sizeof(Foo),(unsigned)sizeof(Bar));}输出

c++ - Visual Studio 2015 中的 "default constructor cannot be referenced"

我在VisualStudio2015中遇到了一条非常奇怪的错误消息。以下精简代码:structA{A(intval=0):x(val){}intx=0;};structB:A{staticinty;};intB::y=1;structC:B{};intmain(){Cc;return0;}在Clang上编译没有任何问题。但是VisualStudio2015IntelliSense给出了以下错误消息:thedefaultconstructorof"C"cannotbereferenced--itisadeletedfunction我的代码中是否遗漏了什么,或者这是VisualStudio

c++ - Noexcept 对派生类构造函数的 promise : can that be used without promising noexcept on base constructor?

假设我有一个类classC:publicB{public:C()noexcept;}noexcept说明符是否需要基类的相同promise?也就是说,当我考虑使用noexcept时,我是只看C::C()的行为还是我还需要考虑B::B()是否可能抛出异常?例如,如果B::B抛出异常,它会传播到C::C还是传播到请求新类实例的代码?--如果传播到C::C,如果基类不是noexceptforconstructor,那将是避免noexceptforconstructor的原因之一。 最佳答案 技术上†不要求将基类构造函数声明为noexcep

c++ - 为 Google 测试夹具指定构造函数参数

对于Google测试,我想指定一个测试夹具以用于不同的测试用例。fixture应分配和释放TheClass类的对象及其数据管理类TheClassData,其中数据管理类需要数据文件的名称。对于不同的测试,文件名应该不同。我定义了以下Fixture:classTheClassTest:public::testing::Test{protected:TheClassTest(std::stringfilename):datafile(filename){}virtual~TheClassTest(){}virtualvoidSetUp(){data=newTheClassData(data

c++ - 使用构造函数返回

只是一个简短的问题。我编写了一些返回自定义类Command的代码,而且我编写的代码似乎工作正常。我想知道是否有任何理由我不应该这样做。它是这样的:CommandBehavior::getCommand(){charinput='x';returnCommand(input,-1,-1);}无论如何,我读到构造函数并不意味着有返回值,但这在g++中有效。谢谢你的建议,瑞斯 最佳答案 构造函数本身没有返回值。它所做的是构造一个临时的Command对象并将构造的对象返回给调用者。它实际上与您所说的相同:Commandtemp(input,

c++ - 避免通过操作从私有(private)构造函数间接实例化

我正在尝试创建一个类,其对象必须包含对其值所代表的内容的简短描述(“名称”)。因此,唯一的公共(public)构造函数应该将字符串作为参数。但是,对于这些操作,我需要创建临时(无相关名称)对象来计算要分配给现有对象的值。为此,我已经实现了一个私有(private)构造函数,不应直接或间接地使用它来实例化一个新对象——这些临时对象应该只通过operator=分配给一个已经存在的对象,它只复制值而不是名称和值。问题来自于“auto”的使用。如果一个新变量声明如下:autonewObj=obj+obj;编译器推导出operator+的返回类型,直接赋值给newObj。这会导致对象具有不相关的

c++ - 自定义类/对象的构造函数和初始化

我可以想象这个问题已经被问过了,但我实际上找不到任何合适的解决方案,所以如果这是一个多余的问题,请原谅。我有一个自定义类classmyClass_A{public:myClass_A();//ConstructormyFunction_A();//SomefunctionfromClassA};现在我有另一个自定义类,它有一个类型为myClass_A的成员classmyClass_B{public:myFunction_B();//SomefunctionfromClassBprivate:myClass_Am_instance;//InstanceofClassA}现在myFunct

c++ - 纯虚类中的构造函数应该是 "protected"还是 "public"?

以下示例来自《InsideC++objectmodel》一书classAbstract_base{public:virtual~Abstract_base()=0;virtualvoidinterface()const=0;virtualconstchar*mumble()const{return_mumble;}protected:char*_mumble;};作者说如果我想初始化纯虚基类的数据成员_mumble,应该实现一个“protected构造函数”。但为什么要保护?为什么“publicconstructor”不适合这个类?感谢您的回答,如果有例子就完美了。

c++ - 如果更改 const 对象是未定义的行为,那么构造函数和析构函数如何使用写访问权限进行操作?

C++标准规定修改最初声明为const的对象是未定义的行为。那么构造函数和析构函数是如何运行的呢?classClass{public:Class(){Change();}~Class(){Change();}voidChange(){data=0;}private:intdata;};//later:constClassobject;//object.Change();-won'tcompileconst_cast(object).Change();//compiles,butit'sundefinedbehavior我的意思是构造函数和析构函数与调用代码做完全相同的事情,但允许它们更