非const函數考慮下面的代碼:間接調用一個const對象
class foo;
foo* instance = NULL;
class foo
{
public:
explicit foo(int j)
: i(j)
{
instance = this;
}
void inc()
{
++i;
}
private:
int i;
};
是使用定義的行爲以下?
const foo f(0);
int main()
{
instance->inc();
}
我這麼問是因爲我使用的是類註冊,和我沒有直接修改f
這將是很好,使它const
,但再後來就f
通過註冊表修改的間接。
編輯:通過定義的行爲我的意思是:對象放置在一些特殊的內存位置,只能寫入一次?只讀內存不存在問題,至少直到C++ 1x的constexpr。恆原始類型,例如,是(常)放入只讀存儲器,並做就可以了const_cast
可能會導致不確定的行爲,例如:
int main()
{
const int i = 42;
const_cast<int&>(i) = 0; // UB
}
當然行 instance = this; 將不會編譯,因爲您將一個const指針(this)分配給一個非const指針(實例)。 – 2009-12-19 23:07:57
@drspod:const構造函數沒有這樣的東西。這在任何構造函數中都不是const的,如果它是const的,你將如何初始化成員? – dalle 2009-12-19 23:17:51