static_cast 能改变一个对象的const属性吗?
1 《C++捷径教程》19.2.2节说:无论是dynamic_cast, reinterpret_cast还是static_cast, 都不能改变一个对象的const属性。可是我测试的时候发现static_cast好像可以修改啊?是我哪个地方做的有问题?
我的测试程序如下:
#include <iostream>
using namespace std;
void f(const int &p)
{
//int &v = (int)p;
int &v = static_cast <int> (p);
v = 100;
return;
}
int main(int argc, char* argv[])
{
int x = 99;
cout < < x < < endl;
f(x);
cout < < x < < endl;
return 0;
}
2 另外,是不是const_cast只能转换const指针类型阿?
我要是写这样的程序int &v = const_cast <int> (p);;,编译就会得到以下错误
error C2440: 'const_cast ' : cannot convert from 'const int ' to 'int '
[解决办法]
const int&去掉const不就是int&
int &v = static_cast <int> (p);
改成
int &v = const_cast <int&> (p);
[解决办法]
有专门的const_cast来作你的需求
[解决办法]
const_cast <> 专门干这事的
[解决办法]
GCC下编译有问题。
[解决办法]
vc2003和bcc下确实能编译并且能修改原来的引用值。