h****b 发帖数: 157 | 1 Is there anything wrong with this C++ class declaration?
class temp
{
int value1;
mutable int value2;
public :
void fun(int val)
const{
((temp*) this)->value1 = 10;
value2 = 10;
}
};
为什么我编译没问题? 再有((temp*) this)什么意思? const函数不是不能改变
member
variable?
多谢 |
X****r 发帖数: 3557 | 2 在fun里this是const temp*类型的,你把它cast成temp*了,
自然就可以给其中的value1赋值了。
【在 h****b 的大作中提到】 : Is there anything wrong with this C++ class declaration? : class temp : { : int value1; : mutable int value2; : public : : void fun(int val) : const{ : ((temp*) this)->value1 = 10; : value2 = 10;
|
h****b 发帖数: 157 | |
X****r 发帖数: 3557 | 4 语法上没问题。
【在 h****b 的大作中提到】 : ok,ic. 那就是说code没问题?
|
e*l 发帖数: 37 | 5 这个纯粹吃饱了撑的
【在 h****b 的大作中提到】 : Is there anything wrong with this C++ class declaration? : class temp : { : int value1; : mutable int value2; : public : : void fun(int val) : const{ : ((temp*) this)->value1 = 10; : value2 = 10;
|
a****l 发帖数: 8211 | 6 这种东西就是以前说的"知识越多越反动".做这种事最后的结果就是引入bug.不要去想
这种所谓的技巧,用最简单的方法,不出错.很多人喜欢考这种东西,可以说最后吸引的都
是危险分子.
【在 e*l 的大作中提到】 : 这个纯粹吃饱了撑的
|
X****r 发帖数: 3557 | 7 这个说的有道理,但略失之偏颇。这些稍微偏僻的语言特性虽然大部分时候不需要,
但在有些时候还是很有用处的,而且它们其实是有内在逻辑的,只要理解就自然会用了。
关键不在于这些技巧本身,而是知道什么时候该用,什么时候不该用。
《老子》云:知其白,守其黑,为天下式。可不是说“不知其白,守其黑”哦。
【在 a****l 的大作中提到】 : 这种东西就是以前说的"知识越多越反动".做这种事最后的结果就是引入bug.不要去想 : 这种所谓的技巧,用最简单的方法,不出错.很多人喜欢考这种东西,可以说最后吸引的都 : 是危险分子.
|
l******e 发帖数: 12192 | 8 这个只是个考题吧
不是真代码
【在 a****l 的大作中提到】 : 这种东西就是以前说的"知识越多越反动".做这种事最后的结果就是引入bug.不要去想 : 这种所谓的技巧,用最简单的方法,不出错.很多人喜欢考这种东西,可以说最后吸引的都 : 是危险分子.
|
a****l 发帖数: 8211 | 9 考题体现了思路.考试会这么出题,平时就会想到这么做.
【在 l******e 的大作中提到】 : 这个只是个考题吧 : 不是真代码
|
l******e 发帖数: 12192 | 10 还真未必
【在 a****l 的大作中提到】 : 考题体现了思路.考试会这么出题,平时就会想到这么做.
|
h*****0 发帖数: 4889 | 11 其实这段例子代码是给出了两种改变const对象内容的方法。很明显第一种用了显式
cast的是不好的,有可能出bug的。不过第二种mutable应该是标准方法。
知道这是怎么回事当然不是坏事。不过简单的一句“代码没有问题”就满足了的,多半
是种下了危险的种子。
【在 a****l 的大作中提到】 : 这种东西就是以前说的"知识越多越反动".做这种事最后的结果就是引入bug.不要去想 : 这种所谓的技巧,用最简单的方法,不出错.很多人喜欢考这种东西,可以说最后吸引的都 : 是危险分子.
|
a****l 发帖数: 8211 | 12 我同意,第二个应该是合理的做法。什么可以动,什么不可以动,定义的时候要写清楚
,使用的时候要照定义做,不要搞投机取巧的hack方法。
【在 h*****0 的大作中提到】 : 其实这段例子代码是给出了两种改变const对象内容的方法。很明显第一种用了显式 : cast的是不好的,有可能出bug的。不过第二种mutable应该是标准方法。 : 知道这是怎么回事当然不是坏事。不过简单的一句“代码没有问题”就满足了的,多半 : 是种下了危险的种子。
|