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修饰的函数或变量只读,即不可更改。

C++中“实例”是什么意思?另外提问关于static和const的区别。
实例:你在C++中定义了一个结构或一个类,这只是一个框架,告诉编译器 你是如何组织数据的,但不代表你就开设了内存单元来进行操作,实例化就是 在内存中开设变量空间的动作对应的语句,比如: int a;就是在堆中申请了一 个整型数据的实例,并取名叫a,类和结构也一样。static静态型,可以定义变量...

C++中“实例”是什么意思?另外提问关于static和const的区别。
类的实例就是一个对象。static修饰的函数和变量表示这个函数或变量描述的是类的方法或属性,而不是某一个该类的对象具有的方法或属性。const修饰的函数或变量只读,即不可更改。

static和const的区别和用处
const就是只读的意思,只在声明中使用;static一般有2个作用,规定作用域和存储方式.对于局部变量,static规定其为静态存储方式,每次调用的初始值为上一次调用的值,调用结束后存储空间不释放;对于全局变量,如果以文件划分作用域的话,此变量只在当前文件可见;对于static函数也是在当前模块内函数可见.static const...

在线等待:关于C++中static和const的区别.
一个变量按存储方法分为auto static register extern四种。其中static可以声明局部变量也可以声明全局变量。当声明局部变量时表示局部变量的值在函数调用结束时不消失而保留原值。const表示只读,被其限定的标量不能改变,但在函数调用结束时消失。const int a;(称谓常变量)这种写法有点问题。当定义常变量...

如何理解c++中的关键字static,const,以及#define在定义
const代表constant,意为常数或常量。用于修饰变量,表示其不可修改;用于指针,表示指针指向的对象不可变;用于方法,表示该方法不会改变对象。static含义复杂,有三种含义:应用于全局变量时,表示每个编译单元独立实例化变量。若分别编译foo.cpp与bar.cpp后链接,全局变量a将有两份,分别由函数各自操作。应...

c++ const和static有什么区别?
static的作用是把一个变量(这里的变量和上面说的概念一样,都是泛指)设置为“静态”。一般情况下,我们在子程序中定义的变量,在这个子程序运行 结束的时候都会被销毁,其值就丢失了。如果用了static,则这个变量的值在子程序结束后依然被保留 。这个变量是否被销毁我不知道,但其值肯定被保留了。当...

c++中的常量和静态有什么区别?
常量是说:“不能修改!或强烈建议别修改!”,const仅说明变量(或者函数)的不可修改性(或不修改别人)。静态是说:“它是在静态数据区的变量”,static影响变量的作用域和存储域。实际上,C++标准不赞成在名称空间和全局作用域中使用关键字static(该标准使用“不赞成”表明,这种做法,目前合法,但...

const和static const的区别
至于类的处理,C++中并没有静态类的直接概念,通常类不会被static修饰。C#中则有静态类,它与普通类的用法截然不同,提供了特定的类级别特性。总结来说,const和static const在C\/C++中的区别主要在于变量的可读性、存储持久性、作用域和类的修饰用法。理解这些差异有助于编写更有效、易于维护的代码。

const与static有什么区别
static 是c++中非常常用的修饰符,他被用来控制变量的存储方式和可见性,下面我将从 static 修饰符的产生原因、作用谈起,全方面分析static 修饰符的实质。static 的两大作用:一、控制存储方式:static被引入以告知编译器,将变量存储在程式的静态存储区而非栈上空间。1、引出原因:函数内部定义的变量,...

一文带你了解static 和const
本文将深入解析C++中的两个关键修饰符:static和const,帮助理解它们的作用和用法。静态修饰符(static)静态修饰符的主要作用是控制变量的存储方式和可见性。它指示编译器将变量存储在静态存储区,而非栈空间。这解决了函数内局部变量值持久的问题,同时保持了其作用范围不变。对于类的静态成员,它们提供了...

相似回答