问题标签 [empty-class]

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

c++ - 关于一个完全空的班级

它的输出是:

0 0 0

0xbff36ad0 0xbff36ac8

元素数量为:4

结果令人惊讶。

如上图,Empty是一个类,它的大小和它的对象都是0,为什么?

也许我猜,因为一个空类的大小是1,当类不为空时,它的大小是由成员决定的,但是这里它的成员是特殊的,它是一个长度为零的数组,而这个数组的大小是0,所以类和对象的大小都是0。

这只是我的猜测。随着程序的运行,我们可以看到两个对象都有地址,而且地址不同。

这里是我的问题:如果可以实现 0 大小的对象,为什么 C++ 标准规定空对象有 sizeof() = 1,它是为了“确保两个不同对象的地址会不同”为什么是大小一个空类不为零?, 但是现在,我们确实有不同的地址作为输出,这是怎么发生的?

更进一步,不管数组集合的大小,最后一行输出总是4,为什么?

谢谢 :)

PS:我在MacOS上运行这个程序,编译器是Apple LLVM 5.1版(clang-503.0.40)(基于LLVM 3.4svn)

0 投票
3 回答
4019 浏览

c++ - C++ 在空类中编写和调用什么函数?

Effective C++一书中,我看到了以下段落:

结果,如果你写

它基本上和你写的一样:

以下代码将导致生成每个函数:

但是在反汇编上面的代码生成的可执行文件后,我意识到不是这样:没有任何函数被调用。

这是主要的汇编代码:

.text段中没有任何名为“Empty”的函数。

那么在我们调用构造函数或空类赋值之后,编译器的行为究竟是什么?它是否像书中所说的那样产生一些功能?如果是这样,它们存储在哪里?

0 投票
1 回答
601 浏览

java - Do we ever need empty class in java project? If yes then why?

In empty class (without field and properties) also compiler automatically creates a default constructor after compiling. If we never use this empty class then why compiler creates this default constructor?

0 投票
2 回答
311 浏览

java - 我正在创建一个空的 Java 类并对其进行编译,是否会创建任何构造函数

我正在创建一个空的 Java 类并对其进行编译,是否会在成功编译时创建任何构造函数

ABC类{

}

0 投票
1 回答
121 浏览

javascript - JavaScript 空设置器方法错误

鉴于此代码:

需要添加新的 setter 方法来更改人的年龄。我正在尝试添加一个空的agesetter 方法,但收到错误消息 Unexpected identifier 或“必须至少有一个参数”,尽管它要求一个空方法开始。

0 投票
1 回答
199 浏览

c++ - 空类的链式继承,还有必要吗?

是否还有充分的理由使用链式基本案例而不是平面多重继承?

过去的情况是,某些类被设计成链式继承。我认为这是强制空基类优化。我知道这就是 Boost.Operators 的设计方式。

这在新的编译器中是否有必要(今天是 2019 年),或者我可以放弃所有的复杂性并接受正常的继承?

它不再用于任何主要或次要目的吗?

0 投票
2 回答
765 浏览

c++ - 构造一个没有默认构造函数的空对象

假设我有一个 type F。我知道那F是空的,但F没有默认构造函数,所以我不能F()用来构造它。有没有办法获得类型的有效对象F?我似乎记得提到过,有一种方法可以神秘地使用联合。理想情况下,这将是constexpr友好的。


这很有用,因为无捕获 lambda 仅在 C++20 中获得了默认构造函数。在 C++17 中,如果我想“将 lambda 传递给模板”并在没有它的实例的情况下调用该 lambda,我需要能够从类型中重建它。

0 投票
1 回答
122 浏览

c++ - 有没有类似 is_empty_but_has_virtual_functions 的东西?

我想制作一个“接口”/混合类(模板),并确保没有人认为向这个类模板添加成员是个好主意,我想static_assert在这种情况下。不幸的是,std::is_empty不允许使用虚函数(因为多态类需要一些空间来存储它们的虚函数表指针或等效的实现细节)。

是否有std::is_empty允许虚拟功能但不允许数据成员的变体(或者它很容易编写)?

我希望这个工作(加上我现在想不出的所有黑暗角落案例):

现场演示在这里

我猜它需要编译器魔术或非常特定于平台的黑客/检查,具体取决于虚拟函数的实现方式。

0 投票
0 回答
71 浏览

c++ - 继承增加了类的大小

根据我的经验,以下代码中的模式 2 几乎总是失败,而模式 1 总是成功。标准的哪一部分(如果有)可以保证这一点?

可以 Derived1并且Data被认为具有共同开始序列的结构吗?

0 投票
3 回答
223 浏览

c++ - c++ - 将内存分配给空类会导致内存泄漏吗?

以下函数出现在OctoMap代码中:

class AbstractOcTreeNode {}; -> 他们声明了一个空类

AbstractOcTreeNode** children; -> 这是在OcTreeDataNode类头文件中声明的

这不会导致内存泄漏吗?不应该是:

我错过了什么?谢谢您的帮助!