是不是编译器不同引起的不同的结果啊
BS上抄的例子:
class Date
{
bool cache_valid;
std::string cache;
void compute_cache_value();
public:
std::string string_rep() const;
Date();
virtual ~Date();
};
Date::Date(){ cache_valid=false;}//这个我自己赋的值
Date::~Date(){}
void Date::compute_cache_value(){
cache="hello";
}
std::string Date::string_rep() const
{
if(cache_valid==false)
{
Date *th=const_cast<Date *>(this);//强制去掉const
th->compute_cache_value();
th->cache_valid=true;
}
return cache;
}
/*********************/
Date d1;
const Date d2;
std::string s1=d1.string_rep();
std::string s2=d2.string_rep();//书上说这句话会出错,我怎么可以运行的,
是不是因为编译器的问题啊
问题点数:20、回复次数:8Top
1 楼healer_kx(甘草(楼主揭贴吧,我们这些上班灌水的也不容易))回复于 2006-05-04 17:02:22 得分 0
应该是了Top
2 楼MagicCarmack(MagiC++)回复于 2006-05-04 19:36:54 得分 0
LZ真是爱学习之人啦
偶看BS那书N久了,从来都米实验过!
感觉大牛就是大牛,很多技术在他眼里也就是再平常、再普通的事!
很难看懂Top
3 楼sankt(宠辱不惊,看庭前花开花落;去留无意,望天空云卷云舒.)回复于 2006-05-04 19:51:31 得分 5
汗~
我这里编译通过,运行成功
Top
4 楼sankt(宠辱不惊,看庭前花开花落;去留无意,望天空云卷云舒.)回复于 2006-05-04 19:52:27 得分 0
难道BS错了??
Top
5 楼sankt(宠辱不惊,看庭前花开花落;去留无意,望天空云卷云舒.)回复于 2006-05-04 19:52:54 得分 0
哪位高手出来详细解说一下??
Top
6 楼qhgary(Gary)回复于 2006-05-05 01:10:44 得分 15
你既然已经用const_cast去掉了const属性,为什么不能运行呢?
如果你看的英文原版,请仔细研究一下是否是理解错了意思?
如果是看得翻译版,可能翻译的人弄反了意思。实践是检验真理的唯一标准。Top
7 楼iseealv(唯笑堡堡主)回复于 2006-05-05 09:55:23 得分 0
我手头没有英文版。但是翻译的里面说:当被应用的对象原本就是个const的时候,就会出现误定义行为。Top
8 楼iseealv(唯笑堡堡主)回复于 2006-05-05 09:56:03 得分 0
d2就是const,所以应该出现无定义行为的Top




