constructor相关内容

继承构造函数和大括号或初始值

我不明白为什么你不能编译一个类,它有一个成员(不是默认可构造)与一个大括号初始值设定器和一个继承的构造函数。 g ++说: test.cpp:22:15:error:使用已删除的函数'Derived :: Derived > 派生d(1.2f); test.cpp:16:13:note:'Derived :: Derived(float)'被隐式删除 ,因为默认定义是错误: ..
发布时间:2016-10-19 20:16:00 C/C++开发

如何在C ++的派生类构造函数中初始化基类的const变量?

我有一个没有构造函数的抽象C ++类。它应该是一个基类,所以其他类可以继承它。我想做的是在基类中声明一个常量变量,并在每个派生类的构造函数中初始化它,但在每个类中没有其他地方。在C ++中是合法的吗?如果是,我该怎么办呢? 解决方案 在C ++中是否合法? 否。 解决方案是在你的基类中提供一个合适的构造函数 - 否则不能用过的。此外,没有理由不提供该构造函数。 cl ..
发布时间:2016-10-19 20:06:34 C/C++开发

纯虚拟调用从构造函数和析构函数

C ++标准说,禁止从构造函数或析构函数调用纯虚函数。这是什么原因?为什么标准应该这样限制? 解决方案 当一个类析构函数运行时,所有子类析构函数都有已经运行。调用由子类定义的虚方法是无效的,它的析构函数已经运行了。 在构造函数中调用虚方法时存在类似的限制。您不能为其构造函数尚未运行的子类调用虚拟方法。 ..
发布时间:2016-10-19 20:01:40 C/C++开发

编译器何时提供类的特殊成员的定义?

我知道当我定义一个空类并且根本不提供声明时,编译器将提供默认和拷贝构造函数,析构函数和拷贝赋值运算符的定义。 这些规则是什么?编译器不是提供一个(例如)复制构造函数?移动构造函数和移动赋值运算符呢? (例如:如果我的类有一个引用成员 解决方案 :在C ++ 11中,它比隐式声明或更复杂。它们可以是隐式声明和默认,隐式声明和删除,或未声明。请阅读此以区分后者2.以下信息不完全正确 ..
发布时间:2016-10-19 19:30:05 C/C++开发

C ++中的默认结构初始化

说我有一个像这样的结构(POD): struct Foo { int i; double d; }; 以下两行之间有什么区别: Foo * f1 = new Foo; Foo * f2 = new Foo(); 解决方案 第一个保留值未初始化;第二个将它们初始化为零。这只适用于没有构造函数的POD类型。 ..
发布时间:2016-10-17 11:07:54 C/C++开发

const引用必须在构造函数base /成员初始化器列表中初始化

我试图阻止访问我写的类的默认构造函数。我想让别人使用的构造函数需要一个const引用另一个对象。我已经使默认构造函数私有,以防止其他人使用它。我得到一个编译器错误的默认构造函数,因为const引用成员变量未正确初始化。我可以做什么来做这个编译? class CFoo { public: CFoo(); 〜CFoo(); }; class CBar { public ..
发布时间:2016-10-17 11:01:43 C/C++开发

在C ++中,是一个只有默认参数的构造函数默认构造函数?

在以下代码中: struct Foo { Foo(int x = 0) ; }; 构造函数计数为默认构造函数? 解决方案 C ++ 98§12.1/ 5 (强调我): 类X的默认构造函数是可以在没有参数的情况下调用的构造函数。如果没有用户声明的类X的构造函数,则默认构造函数被隐式声明。 所以是的,它算作默认构造函数。 另 ..
发布时间:2016-10-17 10:46:09 C/C++开发

如何向未命名类添加构造函数/析构函数?

有没有办法在未命名类中声明构造函数或析构函数?请考虑以下 void f() { struct { // } inst1,inst2; // f实现 - 实例的使用 } 后续问题:实例被构造(并销毁)为任何基于堆栈的对象。什么叫?它是一个由编译器自动分配的名称吗? 解决方案 不能为未命名类声明构造函数或析构函数,因为构造函数和析构函数名称需要匹配类 ..
发布时间:2016-10-17 10:40:33 C/C++开发

有条件地禁用复制构造函数

假设我正在写一个拥有 T 值的类模板 C ,所以 T 是可复制的时,才可以复制c $ c> C 。通常,当模板可能支持或可能不支持某个操作时,您只需定义该操作,并由调用方来避免在不安全的情况下调用它: template class C { private: T t; public: C(const C& rhs); C(C&& rhs ..
发布时间:2016-10-17 10:37:35 C/C++开发

通过初始标准转换序列区分用户定义的转换序列

标准似乎提供了两个规则,用于区分涉及用户定义的转换运算符的隐式转换序列: c ++ 11 13.3.3最佳可行函数[over.match.best] [...]是一个比另一个可行函数更好的函数 F2 if [...] 定义的转换(见8.5,13.3.1.5和13.3.1.6)和从返回类型F1到目标类型(即正在初始化的 实体的类型)的 标准转换序列是比标准转换序列更好的 ..

为什么union已经删除默认构造函数,如果其成员之一没有一个?

N3797 :: 9.5 / 2 [class.union] 说: 如果联合的任何非静态数据成员具有非平凡默认 构造函数(12.1),复制构造函数(12.8),移动构造函数(12.8), 赋值运算符(12.8),移动赋值运算符(12.8)或 析构函数(12.4),联合的相应成员函数 必须是用户提供的或者将被隐式删除(8.4.3)对于 联合 我试图通过示例理解该笔记: ..
发布时间:2016-10-17 10:19:21 C/C++开发

从复制构造函数调用默认赋值运算符是不好的形式吗?

考虑一个需要制作副本的类。副本中的绝大多数数据元素必须严格反映原始数据元素,然而,有几个元素的状态不被保留并需要重新初始化。 从复制构造函数调用默认赋值运算符是不好的形式吗? 默认赋值运算符在普通数据,double,char,short)以及每个赋值运算符的用户定义类。指针需要单独处理。 一个缺点是,由于不执行额外的重新初始化,此方法会导致赋值操作符crippled。也不可能禁用 ..