有没有办法禁用对特定范围内变量的所有访问?
它的用法可能类似于: -
int outerOnly=5; //primitive or class or struct, it can also be a field
outerOnly=4; //ok
{//vvv The disable command may be in a block?
disable outerOnly; //<--- I want some thing like this.
outerOnly=4; //should compile error (may be assert fail?)
int c=outerOnly; //should compile error
}
outerOnly=4; //ok
如果答案为否,是否有任何最接近此功能的功能?
在一些调试情况下会很有用 编辑:例如,我确信某个范围(也是一个独特的功能)永远不应该访问单个特定变量。
答案 0 :(得分:6)
考虑实现类似的东西(可能包含已删除的复制构造函数和赋值运算符):
struct disable
{
private:
disable(const disable&) = delete;
disable& operator=(const disable&) = delete;
public:
disable() {}
};
然后,放置
disable outerOnly;
内部范围内的会导致所需的错误。
请记住,正如 @Cornstalks 所评论的那样,它可能会导致与阴影相关的编译器警告(反过来,通常可以根据具体情况禁用)。
答案 1 :(得分:2)
有没有办法禁用对特定范围内变量的所有访问?
不,没有这样的功能。
如果答案为否,是否有任何最接近此功能的功能?
您可以定义并调用不捕获不需要的变量的闭包,而不是简单的块:
int outerOnly;
int innerToo;
[&innerToo]()
{
innerToo = 42; // ok
outerOnly = 4; // fails to compile
int c = outerOnly; // fails to compile
}();
答案 2 :(得分:1)
只需执行struct Outeronly;
。
请注意,如果不熟悉错误消息,则错误消息可能会令人困惑。
答案 3 :(得分:1)
这是非常直接的解决方案:
int main()
{
int outerOnly=5; //primitive or class or struct, it can also be a field
outerOnly=4; //ok
#define outerOnly outerOnly_disabled
//outerOnly=4; //error outerOnly_disabled is not declared
//int c=outerOnly; //error
#undef outerOnly
outerOnly=4; //ok
}