大家来讨论一下 exercise 12.3
来自: Queequeg
我思考这个问题的时候,参考了一下@戳戳的答案以及stackoverflow上的解释,但是感觉给出的答案似乎有问题。随后我对代码做了测试,验证了我的猜想,在这里阐述一下。按照@戳戳的答案和实现,push_back和pop_back并没有const版本;我在main函数中声明了一个const wy_StrBlob对象my_StrBlob,然后调用my_StrBlob的push_back函数,编译的时候系统报错 error C2662: “void wy_StrBlob::push_back(const std::string &)”: 不能将“this”指针从“const wy_StrBlob”转换为“wy_StrBlob &”。报错的解释如下,my_StrBlob是一个常量对象,即my_StrBlob的数据成员初始化之后就不能修改了,也就意味着my_StrBlob中的智能指针不能再指向别的数据;在非const版本的成员函数push_back时,使用的是普通的this指针,也就是说可以利用这个this指针修改类(对象)中的数据成员;当我们用常量对象my_StrBlob调用push_back时,my_StrBlob传递给push_back的是一个指向常量对象my_StrBlob的指针,显然将指向常量的指针装换为普通指针可能会带来潜在的风险(修改常量对象my_StrBlob的数据成员),所有这种装换会遭到编译器的拒绝,即使这种风险不一定真的存在(实际上push_back中并没有这种风险)。
你的回应
回应请先 登录 , 或 注册
701 人聚集在这个小组
加入小组
相关内容推荐
最新讨论 ( 更多 )
- 如何定义一个包含数字和字符串的数组 (牵着蚂蚁遛达)
- 你们看的是英文版还是中文版? (lvanboy)
- 怎样在DOS下面编译C++程序? (月月)
- 第五版c++ primer 练习1.20 sales_item 头文件在哪 (心)
- 怎样在DOS下面编译C++程序? (月月)