在特定文件中无法访问外部变量
Make extern variable can't be accessed in specific files
所以我有:
foo.h
#ifndef FOO_H
#define FOO_H
extern int bar;
void change_bar_value(const int& value);
#endif
foo.cpp
#include "foo.h"
int bar = 10;
void change_bar_value(const int& value)
{
bar = value;
}
和main.cpp
#include "foo.h"
int main()
{
bar = 20;
change_bar_value(20);
}
所以我希望你不能在 main.cpp
中直接更改 bar
,但你可以调用一个函数来更改 bar
的值。那我该怎么做呢?
“不要成功 extern
”是显而易见的答案,也是通常更可取的解决方案。
如果您迫切希望某些东西全局可读但不可写,请使用 const 引用为其取别名。
(并且不要通过 const 引用传递基元 - 这是毫无意义的悲观化。)
foo.h:
extern const int& bar;
void change_bar_value(int value);
foo.cpp:
static int local_bar;
const int& bar = local_bar;
void change_bar_value(int value)
{
local_bar = value;
}
所以我有:
foo.h
#ifndef FOO_H
#define FOO_H
extern int bar;
void change_bar_value(const int& value);
#endif
foo.cpp
#include "foo.h"
int bar = 10;
void change_bar_value(const int& value)
{
bar = value;
}
和main.cpp
#include "foo.h"
int main()
{
bar = 20;
change_bar_value(20);
}
所以我希望你不能在 main.cpp
中直接更改 bar
,但你可以调用一个函数来更改 bar
的值。那我该怎么做呢?
“不要成功 extern
”是显而易见的答案,也是通常更可取的解决方案。
如果您迫切希望某些东西全局可读但不可写,请使用 const 引用为其取别名。
(并且不要通过 const 引用传递基元 - 这是毫无意义的悲观化。)
foo.h:
extern const int& bar;
void change_bar_value(int value);
foo.cpp:
static int local_bar;
const int& bar = local_bar;
void change_bar_value(int value)
{
local_bar = value;
}