我想知道,在c ++中,对象的初始化何时发生? 是在编译时还是链接时? 例如:
//file1.cpp
extern int i;
int j=5;
//file2.cpp ( link with file1.cpp)
extern j;
int i=10;
现在,编译器做了什么:根据我的说法,它为变量分配存储空间
现在我想知道:
它是否也将初始化值放在该存储中,还是在链接时完成?
答案 0 :(得分:2)
实际上有不同的情况:
答案 1 :(得分:0)
正如您所说,编译器为变量分配存储空间。我认为初始化值也将在编译时完成,而不是在链接时。
答案 2 :(得分:0)
您的示例中没有对象,只有int
s。如果通过“初始化”表示分配了它们的值,那么int
将被转换为目标文件中数据部分中的字大小的条目,这些条目将使用其初始值进行硬编码。数据部分以及目标文件的其余部分由编译器创建,因此我认为您的问题的答案是编译时