我正在通过面试问题寻找初级 C++ 开发人员职位。问题是(引用):
下面的代码是否正确?
struct Foo
{
int i;
void foo ( void ) const
{
Foo* pointer = const_cast<Foo*>(this);
pointer->i = 0;
}
};
我会回答:
代码本身根据 C++03 和 c++11 标准是有效的,并且会成功编译。但它可能会在赋值指针->i = 0期间调用未定义的行为;如果调用foo()的类的实例被声明为const。
我的意思是以下代码将成功编译并导致未定义的行为。
struct Foo
{
int i;
Foo ( void )
{
}
void foo ( void ) const
{
Foo* pointer = const_cast<Foo*>(this);
pointer->i = 0;
}
};
int main ( void )
{
Foo foo1;
foo1.foo(); // Ok
const Foo foo2;
foo2.foo(); // UB
return 0;
}
我的答案是正确的还是我遗漏了什么?谢谢你。