我有以下设置:
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
的函数签名。
答案 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!
...
}