在 c++ 中,全局变量可以在类中递增吗?

Can a global variable be incremented in a class in c++?

本文关键字:c++ 全局变量      更新时间:2023-10-16

我想在 c++ 类中增加全局变量,但无法配置如何执行此操作

int line = 0;
int ivar = 0;
int cvar = 0;
int svar = 0;
class file {
protected:
char name[50];
string read;
string write;
ifstream readfile;
ofstream writefile;
int i;
int j;
};

我想增加类文件中的 cvar 变量。类似的东西

class file {
protected:
char name[50];  cvar++;
string read;
string write;
ifstream readfile;
ofstream writefile;
int i;
int j;
};

但是如果以这种方式完成,编译器会出错。有人可以设计出另一种方法来做到这一点吗?

可以,但增量需要在类的方法中。

使用默认构造函数将起作用,这有一个好处,即当您创建类的新实例时会发生增量:

file::file() /*ToDo - declare this in the class definition*/
{
cvar++;
}

最后,最好使用std::atomic<int>作为cvar的类型,以防止并发问题(即同时读取和写入cvar(。

不能在类定义中放置要执行的代码行。他们需要在一个函数中。

也许在您的情况下,构造函数:

class file {
public:
file() {
cvar++;
}
protected:
char name[50];  
string read;
string write;
ifstream readfile;
ofstream writefile;
int i;
int j;
};

有几种比全局变量更好的方法 - 这取决于您要实现的目标。

从您的评论中:

我正在尝试向我的程序添加一个计数器,该计数器计算 在完整程序中声明的字符类型变量。

全局变量不好。此外,每当使用char[]时"手动"递增计数器也不是很好。我可能会使用类似这样的东西:

struct MyString {
std::string theString;
static int counter;
MyString() { counter++;}
};
int MyString::counter = 0;

然后

struct file {
MyString name;
/*...*/
};

static变量的行为或多或少类似于全局变量,但它不会污染您的命名空间,因为它是它所属的地方(MyString::counter(。此外,如果您使用MyString则在每次需要字符串时都不会忘记递增计数器。最后但并非最不重要的是,我从char[]改为std::string,因为除非有理由,否则std::string应该优先于char[]