给定以下代码:
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 之前是这样。例如,常量原始类型(通常)被放置在只读内存中,并且对其执行 aconst_cast
可能会导致未定义的行为,例如:
int main()
{
const int i = 42;
const_cast<int&>(i) = 0; // UB
}