问题标签 [delegating-constructor]

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 投票
4 回答
6308 浏览

visual-c++ - 如何将重载的构造函数调用转发到 C++/CLI 中的另一个构造函数

我知道在纯 C++中没有办法做到这一点,但我想知道是否可以在 C++/CLI 中从另一个构造函数的初始化列表中调用构造函数,就像在 C# 中一样。

例子:

0 投票
2 回答
84 浏览

c++ - 模板类 - 几个问题

我需要创建以两个整数作为参数的构造函数。

从那里我需要调用通过引用获取这些整数的方法。在这个方法中,我应该动态地将整数转换为char*类型(数字数组)。

在构造函数的末尾,我应该有两个char*数组而不是初始整数。

我不得不这样做,因为另一个班级做同样的事情,但在结构上。并将它们保存到模板属性中。


我是 C++ 语言的新手,但我的第一个猜测是使用模板。我对该主题进行了一些研究,发现它应该有效。

我很想自己编译整个东西,但是在我脑海中实现 c++ 类的混乱会产生很长的编译错误列表。


第一个问题 - 这可以使用模板完成吗?第二个问题,因为我已经自己写了一些东西:

这可以吗,还是我做错了什么?
你对我在 C++ 中实现类的方式有什么建议吗?

为什么我不能用值初始化属性,例如:

如果不需要在 c++ 中使用这个关键字,我该怎么做这样的事情?:

0 投票
2 回答
123 浏览

c++ - 参数的默认值基于其他

我想实现这样的课程:

我想根据ia和ib计算ic的默认值,这里的代码在编译时会出错。

我想知道是否有办法得到这样的东西。

谢谢。

0 投票
1 回答
2592 浏览

c++ - 带有初始化列表的 C++ 委托构造函数。发生了哪些初始化?

我看过一个非常相似的问题,但我不太确定我是否理解答案。如果我委托一个构造函数,初始化列表中的哪些初始化会发生?

例子:

由于编译器设置,在这里我必须有两个类的完整初始化列表。但我想要的是:

  1. 第一个构造函数(int, int)调用第二个构造函数(int, int, Other *
  2. 第二个构造函数分配一个默认地址pOtherClass
  3. 第一个构造函数的初始化列表分配pOtherClassNULL.

我在顶部链接的问题似乎表明这种行为不会发生,但是 ( int, int) 构造函数中初始化列表的意义何在?只是为了让编译器满意?

0 投票
1 回答
251 浏览

c++ - MSVC 直接构造函数调用扩展

这个回复中,tloveless指出在 MSVC 中使用this->foo::foo(42); 构造函数委托直接调用构造函数是可能的:

我很惊讶这甚至可以在 MSVC 中编译。clang++、g++ 和我都同意这是非法的,例如 [class.ctor]/2 “因为构造函数没有名称,所以在名称查找过程中永远找不到它们”

但是,MSVC在 MSVC12 Update 1 (2013) 和 MSVC10 SP1 (2010)中甚至不会发出带有/Wall和不带有语言扩展的警告。/Za

输出是:

在两个版本中。所以没有临时创建,而是调用了一个构造函数。

问题:

  1. 这个扩展名是什么?
  2. 它不被视为扩展吗?(/Za并且扩展列表似乎不这么认为)
  3. 是否有此功能的一些文档/官方描述?

(我用 [delegating-constructors] 标签标记了这个问题,因为它让我想起了这个功能)


元信息:我几乎可以肯定这个问题是重复的,因为这个功能是众所周知的。例如,请参阅“类似问题”的此答案。如果您能找到描述此功能的答案,请不要犹豫,将其作为 dup 关闭。

0 投票
2 回答
610 浏览

c++ - 使用虚拟继承和委托构造函数在构造函数中崩溃

使用上述代码的 MSVC 2013 编译器崩溃了。使用 GCC 4.7.2 编译时,它运行时不会崩溃。类的层次结构如下所示。

这是 MS 编译器中的错误还是我在代码中犯了错误?

0 投票
3 回答
57 浏览

c++ - 使用委托构造函数重新初始化

我有这个类X,使用委托构造函数我只想将值更改ij0。可以这样做吗?

编辑:我知道X(int new_int) : X{new_int, 0}会起作用,但我想知道如果在列表中再初始化一个变量会出现什么错误。

可能我有另一个z,我想用iand初始化它j

IEX(int new_i) :z{ new_i }, X(new_i, 0) {}

0 投票
2 回答
981 浏览

c++ - 用大括号而不是括号调用构造函数

我最近意识到,在 C++11 中,我们可以调用委托初始化器列表构造函数,例如

这个语法正确吗?似乎是,虽然我本来希望在调用函数时总是使用括号,比如Foo({42}). 下面的示例代码在 clang++ 和 g++ 中都能正常编译

我很清楚统一初始化,比如使用声明对象{ },但不知道我们也可以调用构造函数。但是我们不能调用函数,下面的代码不能编译

所以,总而言之,我的问题如下:委派构造函数时是否有特殊规则,允许仅使用大括号调用 init-list 构造函数,例如Foo{something}

0 投票
1 回答
215 浏览

c++ - C++:在调用另一个构造函数之前我可以做一些处理吗?

我有一个有两个构造函数的类。

第一个需要一些对象,我想要第二个对象,它首先从更简单的类型创建对象。这可能吗 ?

0 投票
4 回答
680 浏览

c++ - C++11 委托 ctor 的性能是否比 C++03 调用 init 函数的 ctor 差?

[这个问题已经过高度编辑;请原谅,我已将编辑移至下面的答案]

来自C++11 上的Wikipedia(包括子条目) :

这个[新的委托构造函数特性]带有一个警告:C++03 认为对象在其构造函数完成执行时被构造,但C++11 认为对象在任何构造函数完成执行后被构造。由于将允许执行多个构造函数,这意味着每个委托构造函数都将在其自己类型的完全构造的对象上执行。派生类构造函数将在其基类中的所有委托完成后执行。”

这是否意味着委托链为 ctor 委托链中的每个链接构造一个唯一的临时对象?仅仅为了避免简单的 init 函数定义而产生的这种开销不值得额外的开销。

免责声明:我问了这个问题,因为我是一名学生,但到目前为止的答案都是不正确的,并且表明缺乏研究和/或对所引用的研究的理解。我对此感到有些沮丧,因此我的编辑和评论仓促而糟糕,主要是通过智能手机。请原谅;我希望我在下面的回答中已将其最小化,并且我了解到我需要在评论中保持谨慎、完整和清晰。