最好使用全局变量,例如:
int bumNum;
int extraNum;
bool isIt;
void setup()
{
std::cin >> bumNum;
std::cin >> extraNum;
isIt= false;
}
void anotherFunc()
{
//do something with the global variables
}
int main()
{
setup();
anotherFunc();
return 0;
}
或局部变量,例如:
void setup(int& bumNum, int& extraNum, bool& isIt)
{
std::cin >> bumNum;
std::cin >> extraNum;
isIt= false;
}
void anotherFunc(int& bumNum, int& extraNum, bool& isIt)
{
//do something with the global variables
}
int main()
{
int bumNum;
int extraNum;
bool isIt;
setup(bumNum, extraNum, isIt);
anotherFunc();
return 0;
}
与其他选项相比,第一个选项是输入更少。问题是全局变量并不是真正的朋友:/哦,第二个选项中还有更多的初始化。
答案 0 :(得分:8)
使用全局变量,您会引入一个全局状态,它本身就存在各种问题:
并发问题(当你添加多线程时,你必须开始考虑用某种互斥体保护那些),
它没有缩放,
随着时间的推移,当你增加这些变量的数量时,对于哪些函数使用哪些变量会变得越来越混乱,
仅举几例。
要回答您的问题 - 尽可能使用全局状态下的参数。
答案 1 :(得分:0)
使用结构:
struct Foo
{
int bumNum = 0;
int extraNum = 0;
bool isIt = false;
};
std::istream& operator >> (std::istream& is, Foo& foo)
{
std::cin >> foo.bumNum;
std::cin >> foo.extraNum;
foo.isIt= false;
return is;
}
void anotherFunc(Foo& foo)
{
//do something with the global variables
}
int main()
{
Foo foo;
std::cin >> foo;
anotherFunc(foo);
}