C++中“实例”是什么意思?另外提问关于static和const的区别。

以下这段文字转自网易博客:
题目(一):我们可以用static修饰一个类的成员函数,也可以用const修饰类的成员函数(写在函数的最后表示不能修改成员变量,不是指写在前面表示返回值为常量)。请问:能不能同时用static和const修饰类的成员函数?

分析:答案是不可以。C++编译器在实现const的成员函数的时候为了确保该函数不能修改类的实例的状态,会在函数中添加一个隐式的参数const this*。但当一个成员为static的时候,该函数是没有this指针的。也就是说此时static的用法和static是冲突的。

我们也可以这样理解:两者的语意是矛盾的。static的作用是表示该函数只作用在类型的静态变量上,与类的实例没有关系;而const的作用是确保函数不能修改类的实例的状态,与类型的静态变量没有关系。因此不能同时用它们。

////////////////////////////////////////////////////////////////////////////////////////////////////////
我的问题:“与类的实例没有关系”这句话里的“实例”是什么意思? 关于static和const 能否再给我讲讲? 谢谢!

实例:你在C++中定义了一个结构或一个类,这只是一个框架,告诉编译器
你是如何组织数据的,但不代表你就开设了内存单元来进行操作,实例化就是
在内存中开设变量空间的动作对应的语句,比如: int a;就是在堆中申请了一
个整型数据的实例,并取名叫a,类和结构也一样。
static静态型,可以定义变量或函数等,表明这个部分是计算机不能动态搬
移的,需要固定地址使用,比如在函数内开设了一个静态变量a,那么你在函数
中多次操作这个a,它的值都会一直被记录下来,不会随函数退出而丢失。比如
可以用来记录本函数被调用了多少次。
const常量型,只读型数据,不允许写操作(重新赋值)。用于在程序中多次出
现的相同数据,比如:定义一个PI作为常量,取3.14,程序中需要写3.14的
地方都用PI来替代,一旦程序需要提高精度,用3.1415927来取代3.14进行运算
时,只需要修改一下PI的定义部分即可。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-03-11
实例(instance),在C++叫做实例,在游戏中叫副本.意思都一样.
int a, b ; // int是类型. a和b叫做实例.当然可说是变量,是对象.看从哪个角度上讲了.
// 合起来就叫做实例化.

static和const的用法很多.上面的意思是成员函数的const和static:
class widget
{
public:
static void func() const // 两者不能并存
{ ... }
} ;

non-static成员函数的第一个参数都是this*,表示当前的实例对象.
static属性的成员函数没有this*指针,表示不用通过实例对象,照样可以调用
而const是修饰当前对象的为常量,如果没对象存在,就修饰不了啦.

去看下C++ primer书中的this指针,你会马上都懂了.本回答被提问者和网友采纳
第2个回答  2013-03-11
类的实例就是一个对象。 static修饰的函数和变量表示这个函数或变量描述的是类的方法或属性,而不是某一个该类的对象具有的方法或属性。const修饰的函数或变量只读,即不可更改。
相似回答