默认构造函数创建时间和多个定义
Default constructor creation time & multiple definitions
据我所知,默认构造函数是在需要时创建的。实际上意味着,编译器实际上只在需要调用它时才创建它。
假设我有两个文件,f.c和g.c,它们都有对象创建代码,需要一个默认构造函数。编译器如何防止创建多个默认构造函数…?它怎么"知道"只创造一个?尽管我在两个文件中使用它,并且没有自己实现它。
我的教授告诉我这与内联有关,并让我检查一下。
有什么建议吗?
你(很可能还有你的教授)误解了。
在c++中,你可以多次声明一个函数,但是这个函数只能有一个定义。这是单一定义规则的简单定义。即使您在两个独立的转换单元中创建对象。编译器为创建对象而调用的构造函数只定义一次。
为了回答你的问题,
它怎么知道只创建一个?
它被编程为创建一个且唯一的定义,因为它需要遵守c++标准定义的唯一定义规则。
一个定义规则的例外是内联函数。内联函数允许有多个定义,只要所有定义完全相同。
相关文章:
- C++链接时间资源"allocation"而不定义
- 对于像C++这样的现实世界语言,时间复杂性有什么一致的定义吗
- 在编译时间定义多个派生类
- 包含iostream时的自定义类时间的错误实例
- 自定义 AVIOContext 的未定义 AVFormatContext 持续时间
- C 自定义时间日期结构到UTC时期
- 运算符/ STD :: Chrono ::持续时间和自定义类型与Clang
- 上限time_point到运行时定义的持续时间
- 如果将功能的非常简单的定义移动到.cpp,则编译时间的减少是多少
- 定义时间后退出C 循环
- 自定义NTP客户端获取错误的时间戳
- 形成自定义标准::时间::d和标准::比率的最佳方法是什么?
- 如何在 c++ Windows 控制台应用中以用户定义的格式打印日期时间
- 使用boost将UTC时间转换为自定义时区
- Boost日志不显示自定义时间戳
- 当' sleep_until() '指定过去的时间点时,其行为定义良好
- 默认构造函数创建时间和多个定义
- 在c++中自定义时区格式化日期/时间
- 重新定义发生在哪个程序中?编译或链接时间
- 是否应该敏锐而有意识地尝试尽可能长时间地推迟变量定义?