C ++:make函数将全局变量视为const

时间:2016-09-11 23:38:09

标签: c++ const

我有以下设置:

Foo.cpp中

class Bar {
public:
    inline Bar() : x(0), y(0), z(0) {}
    inline Bar(int X, int Y, int Z) : x(X), y(Y), z(Z) {}
    const int x, y, z;
};

static Bar globalBar;

static void foo() {
    int x = globalBar.x; // the compiler should assume globalBar is const here!
    ...
}

void almightySetup() {
    globalBar = Bar(meaningOfLife(), complexCalc(), magic());
    startThread(foo); // foo() will NEVER be called before this point!
    // globalBar will NEVER be changed after this point!
}

如您所见,编译器可以安全地假设globalBar在指定点处为const,因为globalBar在设置之后将永远不会在此之后更改。此外,foo()在设置之前不会被调用。

但我怎么能做到这一点?我已尝试使用const_cast<>但仍会收到类型错误消息。我一定做错了什么。它甚至可能吗?

我应该补充一点,我无权改变foo的函数签名。

1 个答案:

答案 0 :(得分:0)

这是一个理论上的例子。我还没有对它进行过测试,但我很喜欢C ++专家的意见。这会有用吗?

static Bar globalBar;

static void foo() {
    static const Bar myGlobalBar = globalBar;
    int x = myGlobalBar .x; // the compiler should assume globalBar is const here!
    ...
}