草庐IT

Constructor

全部标签

c++ - 模板忽略了常量(为什么?)

有人知道,为什么要编译?templateclassFrontBackBuffer{public:FrontBackBuffer(constTBufferTypeFrontfront,constTBufferTypeBackback):////constreferenceassignedtoreference???m_Front(front),m_Back(back){};~FrontBackBuffer(){};TBufferTypeFrontm_Front;///buffer(a,b);//buffer.m_Back=33;buffer.m_Front=55;}我用GCC4.4编译。

c++ - C++ 中的空构造函数 :

在我的代码中,我正在执行以下操作,但我不确定我是否被“允许”或者这是否是一种好的设计技术。我需要创建一个空的构造函数,但我还需要一个构造函数来初始化给定参数的变量。所以我正在做以下事情:这是C.h文件。classC{private:stringA;doubleB;public://emptyconstructorC();C(string,double);}还有我的C.cpp文件://thisishowIdeclaretheemptyconstructorC::C(){}C::C(stringa,doubleb){A=a;B=b;}我声明空构造函数的方式是否正确,还是我需要设置A=NUL

c++ - 当有一个带有默认参数的构造函数时是否有2次初始化

这个问题在这里已经有了答案:C++Initialisingfieldsdirectlyvsinitialisationlistindefaultconstructor(3个答案)关闭4年前。我的问题是关于在构造函数中也有默认参数的情况下如何初始化带有初始化程序的成员数据。classInputPlay{public:InputPlay(std::strings="test"):_s(s){};private:std::string_s="default";};问题:调用构造时,变量_s是否会进行两次初始化?又名_s将由字符串文字default初始化,然后由构造函数中的默认参数“test”

c++ - 如何使用成员初始化列表来初始化数组?

classA{public:A();private:chara[5];int*ptr;};A::A():a(0),ptr(0){}这样对吗? 最佳答案 在C++03中,您可以对C数组做的唯一明智的事情是对其进行值初始化(在C++11及更高版本中,它可以进行列表初始化)。来自C++03标准,§8.5/7:Anobjectwhoseinitializerisanemptysetofparentheses,i.e.,(),shallbevalue-initialized.从§8.5/5开始:Tovalue-initializeanobje

c++ - 显式调用构造函数

我知道我们可以显式和隐式调用构造函数的概念,我已经测试了这两种情况(到目前为止,我的所有目的都通过调用来实现constructorIplicitly),但我想知道每当我们创建objects时构造函数都会被隐式调用,那么Explicitly调用构造函数的主要原因是什么.当我们调用构造函数显式而不是隐式调用时,它有什么优势或劣势?例子classinteger{intm,n;public:integer(intx,inty);};integer::integer(intx,inty){m=x;n=y;}现在如果我像这样打电话integerint1=integer(0,100);//Expli

c++ - 在 C++ 中,编写在 main() 之前执行的代码是一种好的形式吗?

在进入main之前调用全局声明类的构造函数。虽然这可能会让代码的新读者感到困惑,因为它很少这样做,但这一定是个坏主意吗? 最佳答案 这不一定是个坏主意,但通常是。首先,它是全局数据,而全局通常是一件坏事。您拥有的全局状态越多,就越难推理您的程序。其次,C++不保证在不同翻译单元(.cpp文件)中定义的静态对象的初始化顺序——因此如果它们相互依赖,您可能会有麻烦。 关于c++-在C++中,编写在main()之前执行的代码是一种好的形式吗?,我们在StackOverflow上找到一个类似的问

c++ - 从没有默认构造函数的类继承的类

现在我有一个A类继承自B类,而B没有默认构造函数。我正在尝试为A创建一个构造函数,它具有与B的构造函数完全相同的参数structB{intn;B(inti):n(i){}};structA:B{A(inti){//...}};但我得到:error:nomatchingfunctionforcallto‘B::B()’note:candidatesare:B::B(int)我该如何解决这个错误? 最佳答案 构造函数应该是这样的:A(inti):B(i){}冒号后面的位表示“使用其int构造函数初始化该对象的B基类子对象,值为i”。我猜

c++ - 返回默认构造值有什么问题吗?

假设我有以下代码:classsome_class{};some_classsome_function(){returnsome_class();}这似乎工作得很好,并且省去了我必须声明一个变量才能产生返回值的麻烦。但我认为我从未在任何类型的教程或引用中看到过这一点。这是特定于编译器的东西(VisualC++)吗?或者这是做错了什么? 最佳答案 不,这是完全有效的。这也将更有效率,因为编译器实际上能够优化临时文件。 关于c++-返回默认构造值有什么问题吗?,我们在StackOverflow

c++ - 如何在抛出异常时阻止构造函数创建对象

当构造函数抛出异常时,如何阻止创建对象?在下面的示例中,我创建了一个Month()类,intmonth_属性的合法值在1到12的范围内。我实例化了December,或者dec,整数值为13。应该抛出异常,但对象仍被创建。然后调用析构函数。如何在抛出异常时中止类实例的创建?输出--Month()constructorcalledforvalue:2--Month()constructorcalledforvalue:6--Month()constructorcalledforvalue:13EXCEPTION:Monthoutofrange2613--~Month()destructor

c++ - 为什么类的常量数据成员需要在构造函数中初始化?

我想知道为什么类的常量数据成员需要在构造函数中初始化,为什么不在其他地方初始化?这样做和不这样做的影响是什么?我还看到只有staticconstantintegraldata可以在类内部初始化,而不是数据成员可以在类内部初始化。例如:-假设下面是我的类声明classA{inta;//Thiswecaninitializeattheconstructororwecansetthismemberbycalling"vSet"memberfunctionconstintb;staticconstintc=10;//Thisworksfinepublic:A();~A();voidvSet(i