问题标签 [initialization-list]

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 回答
203 浏览

c++ - 在静态初始化列表之前预处理变量

在将值传递给初始化列表之前,我想进行预处理活动。

(例如:做断言检查)

这是我的问题的一些背景:假设我有,

如果,在第 15 行;就在我调用初始化列表进行初始化之前b_obj (b_value)- 到 input_value

我想操纵(检查或一些预处理) input_value 的值?

我如何实现这一目标?在 Java 中 - 会有类似初始化块的东西。

我已经想到了——

  1. 在 A 类和 B 类外部创建一个函数,在创建 A 的对象并使用“input_value”对其进行初始化之前,预处理该值。(但是,这违反了松散耦合的概念)

  2. 将父类“A的父类”添加到A类,使A类扩展它,在该类中进行预处理,因为父构造函数在初始化列表之前被调用?我没有尝试过,我不确定这是否是正确的方法。

0 投票
2 回答
467 浏览

c++ - 初始化列表中的 initializer_list

我想用std::initializer_list.

第二个构造函数的 GCC 错误是

错误:数组必须用大括号括起来的初始化程序初始化

我想要的是像这样用 initializer_list 初始化新的 A 实例

并将其传递给基类。

0 投票
2 回答
570 浏览

c++ - 如何在另一个类中初始化我的对象数组

我正在制作一个游戏,其中我用于控制游戏对象的主要类是“inGame”。在“inGame”中还会有其他几个定制的类。

喜欢,


但现在可以说我想要 3 只鼠标。所以我想到了 m1[3] 或者可能是一个向量。

所以我尝试了以下方法:

即使我使用 std::vector m1 那么如何通过 inGame 默认构造函数进行初始化?它会在构造函数中写入吗?

哪种方法更好?主要我会做:

谢谢。

更新:

没有运气

在“m1 {”之后有一个错误,即“期望一个 )”。而 m1 { "}<--" 表示“期望一个 ;”

0 投票
1 回答
102 浏览

c++ - 如果成员是模板类,则在初始化列表中初始化某个类的成员

[已解决]:问题不在模板类初始化中,而是在模板类构造函数中使用未定义宏的代码特定问题。编译器错误并没有抱怨未定义的符号,而是(错误地)与 lambdas 相关。

我已经搜索了答案,但找不到确切的答案。最接近的答案在这里:C++ 调用显式模板构造函数,但我不确定这是否与我的问题完全相关。我的问题是,如果成员是模板类,我如何在初始化列表中初始化结构 B 的成员?

标题 ClassA.h:

标头结构 B.h:

编译器抱怨此错误(以及其他一些错误,如果需要,我可以发布它们):

错误 C3493:无法隐式捕获“数字”,因为未指定默认捕获模式

有没有办法做到这一点,或者一些解决方法?

提前致谢

0 投票
3 回答
2870 浏览

c++ - 构造函数初始化列表中的约束检查

这种情况与如何对构造函数的参数进行约束有关,但略有不同。

您想要初始化一个不可默认构造的成员,但需要在构造它之前检查约束。

例子:

(请注意,这实际上只是一个示例。在这种特定情况下是否应该使用无符号整数是可以讨论的,但问题实际上是关于您要检查构造函数的一般情况)

您有以下课程:

构造函数必须检查整数参数的有效性:

注意 howBuffer没有默认构造函数,而真正的构造函数是noexcept,即没有办法捕获错误。

当整数参数为负时,已经有一个软管surface_。在使用约束值之前进行约束检查会更好。可能吗?

0 投票
3 回答
342 浏览

c++ - 构造函数初始化列表中的 ADL

如何在构造函数初始化列表中启用 ADL?例如,假设我有一个bignum具有命名空间级函数的abs函数。现在我想写一个类Foo,用传递给构造函数的实例的绝对值初始化它的成员;abs如果存在,它应该使用命名空间级别,std::abs否则:

无论如何,在类范围内都禁止使用声明,我不想“污染”命名空间。如何启用 ADL 以便它在构造函数初始化列表中工作?

0 投票
4 回答
12336 浏览

c++ - 对于按值传递的重成员,构造函数的初始化列表中真的需要 std::move 吗?

最近我从cppreference.../vector/emplace_back读到一个例子:

我的问题:这std::move真的需要吗?我的观点是,这p_name没有在构造函数的主体中使用,所以,也许语言中有一些规则默认使用移动语义?

将初始化列表上的 std::move 添加到每个重成员(如std::string, std::vector)会非常烦人。想象一下数百个用 C++03 编写的 KLOC 项目——我们应该到处添加std::move吗?

这个问题:move-constructor-and-initialization-list答案说:

作为黄金法则,无论何时通过右值引用获取某些内容,都需要在 std::move 中使用它,而无论何时通过通用引用获取某些内容(即使用 && 推导出的模板类型),都需要在 std:: 中使用它向前

但我不确定:按值传递不是普遍参考?

[更新]

为了让我的问题更清楚。可以将构造函数参数视为 XValue - 我的意思是过期值吗?

在此示例中,我们不使用 AFAIK std::move

那么,这里是否需要:

对我来说,这个局部变量是过期变量 - 所以可以应用移动语义......这类似于按值传递的参数......

0 投票
1 回答
107 浏览

c++ - C ++:在初始化列表编译正常但在启动时导致崩溃时找不到错误

我需要帮助来了解我在以下初始化列表中做错了什么。我正在使用它来初始化一个数据成员对象“RoomResources”,该对象在我的“Room”类中没有默认构造函数:

现在它编译正确,对我来说似乎没问题,但是当我启动我的程序时它会导致崩溃。我知道这个 Init List 是问题所在,因为我尝试不使用它并使用“RoomResources”对象代替默认构造函数,并且我的程序运行良好。

当我调试我的程序时,我收到以下错误:“在“e:\p\giaw\src\pkg\mingwrt-4.0.3-1-mingw32-src\bld/../mingwrt 找不到源文件-4.0.3-1-mingw32-src/src/libcrt/crt/main.c""

似乎某个对象正在尝试调用程序中尚不可用的某些代码或数据,但我在代码中看不到问题。非常感谢你花时间陪伴。

编辑:这是我的 GetAppRenderer 方法的定义:

0 投票
2 回答
1721 浏览

c++ - 在 C++ 类中使用复杂函数初始化 const 成员

我有一个适用于 3d 网格的程序。这个网格有它自己的类对象 Grid,看起来像这样(简化版):

我现在想做的是能够将变量 i、j 和 k 设置为 const int,以避免在其他函数中意外地弄乱它们。然而,我不能轻易地将它们设置在成员初始化器列表中,因为它们必须从文件中读取。我一直在浏览现有的讨论,但我找不到关于这个问题的准确讨论。

有没有一种解决方案可以将它们设置为 const,并且仍然可以使用复杂的函数来检索数据?在我的实际应用程序中,当然还有更多的变量要读取,初始化后不允许更改。

0 投票
1 回答
224 浏览

c++ - 调用初始化列表构造函数的不同方式

考虑这个初始化器列表构造器使用的例子:

它们之间是否有任何差异(甚至是细微的差异)?

在一个大型项目中,您必须定义一个标准,您会选择哪种风格?
我更喜欢第一种风格,第三种风格很容易与使用 args 调用构造函数混淆。第一种风格对其他编程语言来说也很熟悉。