gpt4 book ai didi

java - C++ 与 Java 构造函数

转载 作者:可可西里 更新时间:2023-11-01 18:40:31 26 4
gpt4 key购买 nike

根据 John C. Mitchell - 编程语言的概念,

[...] Java guarantees that a constructor is called whenever an object is created. [...]

这被认为是 Java 的特性,这使得它在行为上不同于 C++。所以我必须争辩说,C++ 在某些情况下不会调用类的任何构造函数,即使为该类创建了对象也是如此。

我认为发生继承时会发生这种情况,但我想不出那种情况的例子。

你知道什么例子吗?

最佳答案

如果您的类至少定义了一个构造函数,那么该语言将不允许您在不调用构造函数的情况下构造该类型的对象。

如果您的类没有定义构造函数,那么一般规则是将调用编译器生成的默认构造函数。

正如其他发帖人所提到的,如果您的类是 POD 类型,则在某些情况下您的对象将处于未初始化状态。但这并不是因为编译器“没有调用构造函数”。这是因为该类型没有 构造函数(或者它有一个什么也不做的构造函数),并且处理得有些特殊。但话又说回来,POD 类型在 Java 中不存在,因此无法真正进行比较。

也可以绕过一些东西,这样构造函数就不会被调用。例如,分配一个 char 的缓冲区,获取指向第一个 char 的指针并将其转换为对象类型。当然,在大多数情况下是未定义的行为,所以它不是真的“允许”的,但编译器通常不会提示。

但最重要的是,任何一本书如果没有非常明确地说明他们指的是哪些特定的极端情况,就做出这样的声明,很可能充满了垃圾。话又说回来,大多数写 C++ 的人实际上对这门语言了解不多,所以这不足为奇。

关于java - C++ 与 Java 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1865800/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com