首页 > 解决方案 > 正确的全局变量定义/声明

问题描述

这可能是一个非常直截了当的问题,但由于某种原因,到目前为止我还无法在伟大的互联网上找到答案。

在使用全局变量时,我知道全局变量是不好的,应该在大多数情况下避免使用,但是在极少数情况下全局变量可以最好地完成工作,是否应该同时声明和初始化全局变量?我最近一直在尝试深入研究“尽可能在声明时始终初始化变量”的口头禅,因为这通常会在以后省去很多麻烦,并且在 C++ 中受到鼓励。这条规则是否也适用于全局变量?

如果在声明变量时在其全局范围内初始化变量,这对程序有何影响?这是最佳实践吗?

非常感谢您的建议!

标签: c++global-variables

解决方案


是的,您确实想初始化全局变量。正如@paladin 评论的那样,如果您不初始化它们,编译器将尝试使用默认值初始化它们。考虑这个简单的例子:

struct Foo {
    Foo(int x, char *y, double z) {}
};

Foo f;

编译器会尝试初始化f,但没有默认构造函数。这会配置一个错误:

<source>:5:5: error: no matching constructor for initialization of 'Foo'
Foo f;
    ^
<source>:1:8: note: candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 0 were provided

所以是的,你需要初始化你的全局变量,如果你不这样做,编译器会尝试为你做。


推荐阅读