【发布时间】:2014-10-07 15:06:22
【问题描述】:
我不明白构造函数在 C++ 中的正式含义。我正在阅读 3.8 条款(对象生命周期,N3797)并遇到以下内容:
如果一个对象属于 类或聚合类型,并且它或其成员之一由以下方式初始化 一个普通的默认构造函数以外的构造函数。
我想了解一般的初始化。我已阅读第 8.5 节,N3797。如果某个对象被初始化,是否会调用构造函数(可能是微不足道的默认值)?我的意思是每个初始化过程(甚至是零初始化)都意味着构造函数调用。最好能提供相应的标准参考。
【问题讨论】:
-
阅读 C++ 标准可能不是学习基础知识的最佳方式...请从教程或介绍性文本开始。如果您搜索,您可以找到此类列表。
-
@TonyD 对于不同类型初始化的细节以及它们何时被触发,规范可能是最好的方法。这个问题似乎不是关于一般的构造函数,而是更多关于规范承诺的细节。
-
@templatetypedef 我同意。这个问题不是“什么是构造函数”,而是关于初始化要求和通过其中的标准采取的路径。显然那些回答这个问题的人也很难得到这个。
-
尝试通过阅读标准来学习 C++ 是值得称赞的,但不切实际。有很多信息,作为初学者,你并不真正需要。在这种情况下,您可能不需要知道
[when] an object is said to have non-trivial initialization或聚合类型是什么(我自己几乎不了解聚合,而且我不是初学者)。我什至敢说,标准中的大部分信息对于普通程序员来说是没有必要知道的。 -
@DmitryFucintv 构造函数是“特殊成员函数”(C++11 §12.1 [特殊])。因此(成员函数),它们需要一个类类型。原始类型没有成员函数,因此没有构造函数,无论是微不足道的还是其他的。这并不是说它们在适当使用时不能通过
=、{}或()进行初始化。 那是你想知道的吗?
标签: c++ constructor language-lawyer