![](/img/trans.png)
[英]Are static member functions in c++ copied in multiple translation units?
[英]Static, global and multiple translation units
这包括三个相关的问题:
1)您最终如何使用多个翻译单元? 当然所有的源文件和头文件都会“加入”在一起,否则你最终会得到代码调用代码而不是那个“程序”的一部分。 翻译单位不是一个程序吗?
2)静态对象/类如何处理多个翻译单元? 如果不同翻译单元中的多个源文件包含一个标题,该标题会创建一个对象(具有静态数据成员),那么每个翻译单元会有一个单独的静态数据成员吗?
3)类似于问题2,全局变量是否在多个翻译单元之间共享(有点像我建议它们是单独的程序 - 只是编译在一起???)或者全局变量仍然在所有翻译单元中起作用?
1)每个源文件及其包含的头文件称为翻译单元。 它被编译成目标文件。 然后,链接器最终将所有目标文件加入到最终的可执行文件中。 (简化,但给你一个基本的想法)
2)链接器将删除副本。
3)是的,见2)
不,它们每个都被编译成一个目标文件,随后链接在一起。
如果对象被声明但未在标题中定义,这是更好的做法,那么将只定义一个对象( 假设它实际上只在一个源文件中定义),并且包含标题的每个人将有一个方法用它编程。
源文件中的static
对象将无法在该转换单元外部访问,否则这些static
对象将出现在全局范围内。 在任何类或函数之外, static
限制了翻译单元的范围。
非静态范围的对象,是的,他们这样做。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.