问题标签 [in-class-initialization]

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 投票
1 回答
217 浏览

c++ - 在类内将不完整类型的 unique_ptr 初始化为 nullptr 时使用 gcc 编译错误

我正在使用带有 unique_ptr 的 pimpl idiom 编写一些代码。当我尝试使用类内初始化将unique_ptr默认设置为nullptr时,gcc给出了编译错误,而clang和msvc都成功编译了代码。如果我不使用类内初始化,错误就会消失。

当我编译上述代码时,gcc 抱怨“错误:'sizeof' 对不完整类型'B' 的无效应用”。我已经尝试过 gcc 8.3 和 gcc 9.1 都没有成功。这是编译器错误吗?谢谢!

编辑: 我按照@eerorika 的建议进行了尝试。如果头文件和源文件合并为一个文件,可以正常编译,但不能分开。

编辑 确认是编译器错误并已在 gcc9.2 中修复。

0 投票
3 回答
503 浏览

c++ - 在类成员的实例化期间:使用 map[key] 访问 std::map 值时,“没有运算符“[]”与这些操作数匹配”

我已经看了很长时间了。我不明白是什么在困扰它。给我问题的最小代码如下所示。我评论发生错误的行。编译错误跟在代码后面。

编译时出现错误:

另一方面,像这样的东西编译得很好(我的意思是代码什么都不做,但它编译):

所以我的问题是:它为什么抱怨no operator "[]" matches these operands呢?

0 投票
1 回答
143 浏览

java - 类加载与初始化:Java 静态最终变量

Example.java

使用.java

当我运行java -verbose:class Use, 并给出输入时,1输出10就是常i数值。但是Example类还没有加载。但是,当我输入 as 时2只有 Example 类被加载到 JVM 中,如详细输出所示,然后执行 Example 内的静态块,并且j初始化然后打印的值。

我的查询是:如果对于输入,1即当一个类的静态最终(常量)值Example在另一个类中被请求时,那么如果在此之前该类从未加载到 JVMUse中,那么从哪里获取该常量值?Example静态 final 何时以及如何i初始化并存储到 JVM 内存中?

0 投票
1 回答
30 浏览

python - 未更新的空列表列表的类初始化

我有一个由 4 个具有设定长度的双端队列组成的列表。我已经制作了该列表,希望它会像其他列表一样更新。这是一个简单的例子:

我的问题是为什么它仍然只是零?当其中的双端队列更改时,它为什么不更新?关于如何实现这一点的想法?

0 投票
3 回答
74 浏览

c++ - 为什么我们需要为静态 const 数据成员单独定义?

你好,如果我有一个static const数据成员,那么我可以为它提供一个类内初始化程序,我不需要在类主体之外再次定义它。

  • 但只有当该常量在类范围内使用并且如果在外部使用时,必须在外部提供单独的定义,否则对它的任何引用都会导致链接时错误:“未定义对静态对象的引用:x”。

  • 为什么在类范围之外使用static const数据成员作为数组大小是可以的?sz_

  • 为什么当传递给对链接器进行左值引用的sz函数时无法链接并抱怨 的定义?barconstFoo::sz_

  • 该函数bar接受一个左值引用,const int&因此它可以从一个右值初始化,那么为什么它对初始化器的定义很重要Foo::sz_

0 投票
0 回答
61 浏览

c++ - = 和 {} 类内初始化的区别

当我想在类定义中放入初始值时,有两种方法可以完成:使用 {} 和 =

这两个选项有什么区别吗?在 A 类和 B 类中,初始化字段的方式会有所不同吗?

用=会是拷贝初始化,那么用{}应该更高效吧?或者在类内初始化的情况下它们是相等的并且只是提供不同的语法?

0 投票
0 回答
25 浏览

python - Python 访问当前类对象(非实例)中的超类成员

我想知道是否有一种方法允许我们访问超类成员以在没有实例的情况下初始化当前类成员。

0 投票
2 回答
88 浏览

c++ - 为什么 C++ 允许类内定义?

课堂定义是否违反了 ODR 规则?

Bjarne Stroustrup 的解释是这样的:

一个类通常在头文件中声明,并且头文件通常包含在许多翻译单元中。但是,为了避免复杂的链接器规则,C++ 要求每个对象都有唯一的定义。如果 C++ 允许在类内定义需要作为对象存储在内存中的实体,则该规则将被打破。

这是成员的实际定义吗?这是否违反 ODR 规则?如果没有,与通过构造函数进行初始化相比,这样做有什么优势?

0 投票
0 回答
57 浏览

c++ - 对象的默认初始化、值初始化和类内初始化不正确?

你可能会觉得代码很长,我写了很多东西,但相信我,这很简单。

为了理解这一点,我在 stack-overflow 上引用了这两个答案。 后 1后 2

代码

输出

B类

b1是值初始化精确零初始化。

b2是默认初始化意味着没有初始化。

b3是大括号初始化意味着值初始化导致零初始化。

我无法创建b4()类似q4(不完全类似,但你知道我的意思),因为它引导函数定义而不是对象声明(最令人烦恼的解析)

我认为q1应该初始化值,但在看到输出后它与我的想法不符。

q2是默认初始化意味着没有初始化。

q3是大括号初始化意味着值初始化导致零初始化。

q4调用构造函数,但没有用户定义的构造函数,所以它应该默认初始化意味着没有初始化。

我知道q1, q2, q3,q4是指针,但为了简单起见,我将上述语言用于 ex。q3是大括号初始化的。但我想你知道我的意思。

我对b1,b2b3看法被证明是正确的,所以我对此没有任何疑问,这可能只是巧合,如果我错了,请纠正我。

关于q1, q2, q3,q4

我认为b1我认为它也应该适用,q1但它不会发生,所以请解释一下。

关于q2我认为匹配的内容,所以没问题,但如果我错了,请纠正我。

现在与q3&混淆了q4。我认为两者都在呼吁构造函数,但我不确定。我假设两者都调用构造函数,但我们没有用户定义的构造函数,所以它应该默认初始化意味着未初始化,不是吗?那么为什么两者都被精确地初始化为零初始化。

A级

因此,如果我们进行类内初始化,无论我们在哪里声明对象,它将使用我们提供的内容进行初始化,我觉得这是正确的,但只是想确认一下,如果您想告诉我更多关于这一点的信息,请添加。

0 投票
2 回答
131 浏览

c++ - 具有大小的向量的类内初始化

上面的代码创建了包含值为 10 的单个元素的向量。但我需要初始化大小为 10 的向量。像这样:

如何通过课堂初始化来做到这一点?