在 c++ 中,全局变量可以在类中递增吗?
Can a global variable be incremented in a class in c++?
我想在 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[]
。
相关文章:
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 当vector是tje全局变量时,c++中vector的内存管理
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 内联函数中具有内部链接的全局变量
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 全局变量 多读取器 一个写入器多线程安全?
- 如果全局变量默认是外部变量,为什么要添加"extern"关键字?
- 不同作用域中的静态变量和全局变量
- C++ 在编译时具有函数计算全局变量
- 修改程序的入口点时未调用全局变量的构造函数
- 使用 std::ios_base::Init 正确初始化全局变量
- 为什么我的全局变量似乎没有变化?
- C ++程序如何返回我的数组或写入全局变量
- 为什么我的数组值与此处的全局变量不匹配?
- QT C++中对全局变量的未定义引用
- 跨多个类的全局变量而不会出现重定义错误?
- 赋予全局变量而不是局部变量优先级的函数 - (异常行为)
- C++线程不检测全局变量更改
- 在 elf 文件中查找全局变量的位置
- 包括一个类来定义全局变量参数 c++ :(