问题标签 [ctor-initializer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1261 浏览

c++ - 从 C++ 中的另一个构造函数调用构造函数时出错

我有一个struct A具有多个初始化不同数据成员的构造函数。

我得到的错误是当我用 say 实例化它时custom_type,错误 type A<custom_type> is not direct base of A<custom_type>突出显示了我在另一个构造函数中调用的构造函数。我正在使用 C++11。有什么问题?

0 投票
2 回答
244 浏览

c++ - 通过在构造函数主体之前抛出异常来防止构造

C++

我希望一个类throw在其构造函数的主体的左大括号之前出现异常,{方法是使用它自己的成员函数来防止构造。我定义了一个成员函数,其目的只是无条件地throw异常,具有任意选择的非void返回类型和一个类型与该返回类型匹配的虚拟数据成员,以便我可以throw通过调用构造这个数据成员来触发构造函数初始化列表中的成员函数。这可行,但并不优雅,因为在非玩具类中,虚拟变量没有其他用途,只能为成员函数运行提供借口,并且成员函数的非void返回类型没有其他用途,只是有一个借口可以由相同类型的虚拟数据成员的构造函数调用。

这个玩具可以编译但并不优雅:

控制台输出:

{如果没有虚拟变量,有没有办法在构造函数主体的左大括号之前抛出异常?

0 投票
3 回答
4100 浏览

c++ - 首先调用哪个构造函数?

我看过类似的查询,但我似乎让自己迷失了方向。我有一个简单的例子,所以请考虑以下几点:

程序运行时会显示

我现在的问题是:实际上首先调用了哪个构造函数。在执行其内容之前是否调用了 Cat(),然后 Cat() 调用了 Animal(),或者编译器/程序是否查看 Cat(),看到它是一个 Animal(),然后先调用 Animal(),然后调用 Cat()?

0 投票
3 回答
2240 浏览

c++ - 在类的构造函数初始化程序中填充 std::array

有没有办法std::array在类的构造函数初始化器中填充一个?

现在我正在填充它很长的路要走:

-编辑 -

Visual Studio 2010 没有完整的 c++11 支持(它仍然将 std::array 列为std::tr1::array命名空间的 typedef!)。

尝试包括:

这些都不适用于VS2010。他们都报告错误:

0 投票
3 回答
1781 浏览

c++ - 正确初始化基类构造函数中的 unique_ptr

我尝试将 an 传递std::unique_ptr给继承的类,该类会将其转发给基类构造函数(使用构造函数初始值设定项列表)。如果基类构造函数接收到nullptr一个默认对象,则应该std::unique_ptr从我的基类构造并分配给成员变量。但不知何故,如果我尝试从std::unique_ptr任何地方访问任何元素(因为它在某种程度上仍然是一个nullptr- 即使此时这应该是不可能的),我会以某种方式得到一个 AccessViolation。

任何想法这里出了什么问题?

https://ideone.com/fHvYqe

0 投票
1 回答
463 浏览

c++ - 我可以调用虚函数来初始化基类子对象吗?

我知道不应该在构造函数中直接或间接调用虚函数,但是这段代码运行良好。
我这里的东西安全吗?

如果不是,以下(基于评论)是否是正确的解决方法?

0 投票
3 回答
449 浏览

c++ - 在构造函数中初始化 const 字段

C++ 中的 const 字段必须在初始化列表中初始化,这使得从构造函数参数计算相互依赖的值变得非常重要。

例如,将这段 java 代码翻译成 c++ 的最佳方法是什么?

我想过在 SomeObject 中封装一个子对象,但这只是转移问题;或使用静态方法构造对象:

有更好的解决方案吗?

谢谢你。

0 投票
2 回答
656 浏览

c++ - 使用虚拟继承时初始化基类

在 OS X 上使用 Xcode 5.1 编译以下代码时出现意外错误。Apple LLVM 版本 5.1 (clang-503.0.40) (基于 LLVM 3.4svn)

报告的错误是:

我的理解是,从它继承的类(Parent1 或 Parent2)不会调用虚拟基类(GrandParent)的构造函数。相反,构造函数由具体类 (Child) 的构造函数调用。

这个对吗?

如果我为 GrandParent 提供默认构造函数,它可以编译。但是,如果我构造一个子对象:

并检查它我可以看到:

所以使用 Parent1 时 GrandParent 的年龄是不正确的,但对于 Parent2 是正确的。

我误解了什么吗?或者错误可能是编译器错误?

更新

如果我将 Parent1 的 ctor 更新为:

Parent1(int age) : GrandParent(100), m_age(age) { }

它现在编译。检查值显示:

这显然是不对的。此外,修改后的代码使用 VS 2013 Express 在 Windows 上编译,并且检查的值是正确的。

0 投票
2 回答
286 浏览

c++ - C++ 解释重载成员函数 Iterator(int i = 0) 的“单线”构造函数: i(i) { };

我有一个关于这个承包商实际上在做什么的问题。我在网上找到了它,它适用于我的目的,但我希望了解它的符号。

这是一个证明它有效的成员函数。

const Iterator& index = 2. 函数输出 2。

如果你忽略关于 的部分Element e,基本的想法是我可以使用Iterator(SinglyLinkedList& list)and Iterator(int i = 0),两者都可以。您可以使用 ? 访问整数属性index.i

任何一般的见解也值得赞赏。

0 投票
5 回答
76 浏览

c++ - 在 C++ 中,当复合对象构造函数具有依赖关系时,我应该如何在初始化列表中强制执行它们的顺序

如果我有一个组合其他具有相互依赖关系的对象的类,(如何)我应该执行它们的构造顺序?

例如

想象一下 Child2 的构造函数需要 Child1& 并且我想将 c1 传递给 c2 构造函数。

如果我只是执行以下操作...

...这可能不是一件好事,因为在 c2 的初始化程序运行时可能无法构造 c1?或者在类声明中 c1 在 c2 之前是否足够好?

或者我应该明确引用 c1 构造函数(如果这不是必需的,那么这样做是否是一个好习惯以使其明确?)。例如