读书人

static_cast 能改变一个对象的const属

发布时间: 2012-03-01 10:25:46 作者: rapoo

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下确实能编译并且能修改原来的引用值。

读书人网 >C++

热点推荐