我一直想知道为什么不允许通过将任何数据传递给某个函数来初始化任何数据,尽管事实上构造函数无论如何都可以在全局范围内调用,所以如果我们有类似全局范围内的数组,它不能被任何函数初始化,但如果它在全局范围内的结构对象中,则可以在该范围内使用构造函数对其进行初始化:
//global scope
char charArray[100];//can't be initialized using any function at global scope but in other scopes it could by being passed to some function
struct Test{
public:
Test(){
//initialization
}
char charArray[100];
};
Test obj();//now charArray can be initialized using constructor at global scope
最佳答案
实际上,您可以在全局范围内调用函数。
int foo()
{
return 5;
}
int bar = foo();
这正是多年前 C 语言的设计方式,您不能让函数在全局范围内独立运行。所有程序代码都从 main
开始。
一般来说,您对全局初始化的依赖越少(尽可能避免它),您就越不必担心奇怪的静态初始化错误和此类随机出现的问题。
数组是一种不同的情况,因为您永远不能将函数调用的结果分配给数组 - 在这种情况下初始化它的唯一方法是在构造函数中,正如您所观察到的那样。
编辑:有些邪恶的方法来初始化一个受评论启发的数组:
bool do_init(int a[50])
{
// Do whatever to init the array here.
return true;
}
int array[50];
bool init_array = do_init(array);
这仅适用于在翻译单元中,全局变量的创建/初始化顺序保证是它们在文件中出现的顺序。
关于c++ - 为什么无法通过将数据传递给某个函数来在全局范围内初始化数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4317315/