#include<iostream>
using namespace std;
class temp
{
int value1;
public :
void fun() const
{
((temp*)this)->value1 = 10;
}
void print()
{
cout<<value1<<endl;
}
};
int main()
{
temp t;
t.fun();
t.print();
}
回答
C++试图防止意外错误,但它并没有超出对抗决意让自己的事情发展的程序员的方式。如果你使用演员,你告诉它“相信我,我知道那里有什么”,要求它忽略它自己对该节目的知识。正是因为你使用的C风格的转换操作符是危险的,而且很容易被误用,C++引入了static_cast,const_cast和reinterpret_cast,它们以程序员的意图表达这样一种方式,让编译器仍然可以说:“嘿, ,这需要的不仅仅是你要求的宽大处理类型“。 reinterpret_cast是大爸爸,尽管......没有争论......就像C-cast一样残忍,而且在高级应用程序中很少需要它。正是因为它很少需要,详细而且容易看到,所以引起了审查。散布C代码的代码可以轻松隐藏错误。
'reinterpret_cast'在这里不起作用:它不能抛弃常量。 – UncleBens 2010-08-26 16:13:01
$ 5.4/5约为explicit type conversion
(这是这里正在使用)的
进行
的转换 - const_cast类型转换(5.2.11),
- 一个的static_cast( 5.2.9),
- 一个的static_cast后跟一个的const_cast,
- 再可使用的 明确的类型转换铸造符号来执行的reinterpret_cast后跟一个的const_cast,
- interpret_cast(5.2.10),或
。同样的 语义限制和行为 适用。 如果一个转换可以是 ,其解释方式可以是上面列出的多种方式中的一种,则列表中第一个出现的解释 将使用 ,即使由 产生的解释不合格。 如果一个转换可以多个方式在 中解释为static_cast 后跟const_cast,则 转换是格式不正确的。
在这种情况下,((temp*)this)
被视为(const_cast<temp *>(this))
并且格式良好。这删除了常量,从而允许更改类成员的值。
- 1. eclipse为什么说局部变量即使被使用也不被使用?
- 2. 为什么MFC C++ CString(const char *)完全改变const char *值?
- 3. 为什么即使在UI线程上TextView的文本值也没有被改变
- 4. 为什么即使在指定全局之后,函数也不会改变全局变量
- 5. 即使将它变成全局变量也不被识别为外部函数
- 6. 为什么在一个类中需要const函数和非const?
- 7. 为什么这个批处理变量即使设置也不会改变?
- 8. 为什么有些细胞即使不符合条件也会被修改?
- 9. 为什么我能够改变这里用const int的价值?
- 10. 即使改变site.css,为什么样式不会改变?
- 11. 为什么我的函数在ES6中被导入为值'0'?
- 12. ESLint:即使变量未被重新分配,prefer-const也不会抛出错误
- 13. 为什么argv []被声明为const?
- 14. 为什么在Angular 2中改变“const”值不会给出错误?
- 15. 为什么我不能在const参数函数/方法中传递const对象?
- 16. 为什么变量没有改变,对象是在函数中赋值后?
- 17. 为什么Java中的局部变量也被称为“自动”?
- 18. 为什么即使scanf中的输入值不等于1,printf函数也会输出值输入
- 19. 为什么投这个指针也改变了指向的值
- 20. const B和const A *不兼容,即使B被混淆为A *
- 21. 为什么__attribute __((纯))函数中的GCC强制参数为const?
- 22. 为什么有时函数返回一个const或const引用
- 23. 为什么宏的值在被调用函数中没有变化?
- 24. 为什么struct在使用函数时不会改变?
- 25. 为什么在课堂上CONSTANT值被改变了?
- 26. 为什么Rust的`Atomic *`类型使用非可变函数来改变该值?
- 27. 为什么布尔函数即使成功执行后也会返回false?
- 28. 为什么const在静态函数中是未定义的?
- 29. python在定义函数时为什么值改变而不使用return
- 30. Android:为什么我的EditText保持其价值,即使在方向改变?
顺便说一句,更好的方法是让value1变为可变 – 2010-08-26 10:19:05
@jk:可变的最大缺点是它使变量可变为所有*方法,而不仅仅是一个。演员阵容小得多,因此IMHO更少。 – 2010-08-26 10:26:39
建议:只能使用C++风格强制转换(“* _cast”)使您的意图可见。不要使用C-Style强制转换“(type)”,因为这些都是可能的转换成一个。 – 2010-08-26 10:35:07