栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ 中 const 和 static 关键字(定义,⽤途)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ 中 const 和 static 关键字(定义,⽤途)

static 作⽤:控制变量的存储⽅式和可⻅性。 作⽤⼀:修饰局部变量 :⼀般情况下,对于局部变量在程序中是存放在栈区的,并且局部的⽣命周期在包含语句块 执⾏结束时便结束了。但是如果⽤ static 关键字修饰的话, 该变量便会存放在静态数据区,其⽣命周期会⼀直延续 到整个程序执⾏结束。 但是要注意的是,虽然⽤ static 对局部变量进⾏修饰之后,其⽣命周期以及存储空间发⽣了 变化,但其 作⽤域并没有改变, 作⽤域还是限制在其语句块。 作⽤⼆:修饰全部变量 :对于⼀个全局变量,它既可以在本⽂件中被访问到,也可以在同⼀个⼯程中其它源⽂件被 访问( 添加 extern 进⾏声明即可 ) 。⽤ static 对全局变量进⾏修饰改变了其作⽤域范围,由原来的整个⼯程可⻅变成 了 本⽂件可⻅ 。 作⽤三:修饰函数 :⽤ static 修饰函数,情况和修饰全局变量类似,也是改变了 函数的作⽤域 。 作⽤四:修饰类 :如果 C++ 中对类中的某个函数⽤ static 修饰,则表示该函数属于⼀个类⽽不是属于此类的任何 特定对象;如果对类中的某个变量进⾏ static 修饰,则表示该变量以及所有的对象所有,存储空间中只存在⼀个副 本,可以通过;类和对象去调⽤。 (补充 :静态⾮常量数据成员,其只能在类外定义和初始化,在类内仅是声明⽽已。) 作⽤五:类成员 / 类函数声明 static
  • 函数体内 static 变量的作⽤范围为该函数体,不同于 auto 变量,该变量的内存只被分配⼀次,因此其值在下 次调⽤时仍维持上次的值;
  • 在模块内的 static 全局变量可以被模块内所⽤函数访问,但不能被模块外其它函数访问;
  • 在模块内的 static 函数只可被这⼀模块内的其它函数调⽤,这个函数的使⽤范围被限制在声明它的模块内;
  • 在类中的 static 成员变量属于整个类所拥有,对类的所有对象只有⼀份拷⻉;
  • 在类中的 static 成员函数属于整个类所拥有,这个函数不接收 this 指针,因⽽只能访问类的 static 成员变 量。
  • static 类对象必须要在类外进⾏初始化,static 修饰的变量先于对象存在,所以 static 修饰的变量要在类外初 始化; 由于 static 修饰的类成员属于类,不属于对象,因此 static 类成员函数是没有 this 指针,this 指针是指向本 对象的指针,正因为没有 this 指针,所以 static 类成员函数不能访问⾮ static 的类成员,只能访问 static修饰 的类成员;
  • static 成员函数不能被 virtual 修饰,static 成员不属于任何对象或实例,所以加上 virtual 没有任何实际意 义;静态成员函数没有 this 指针,虚函数的实现是为每⼀个对象分配⼀个 vptr 指针,⽽ vptr 是通过 this 指 针调⽤的,所以不能为 virtual;虚函数的调⽤关系,this->vptr->ctable->virtual function。

const 关键字:含义及实现机制 const 修饰基本类型数据类型 :基本数据类型,修饰符 const 可以⽤在类型说明符前,也可以⽤在类型说明符后, 其结果是⼀样的。在使⽤这些常量的时候,只要 不改变这些常量的值 即可。 const 修饰指针变量和引⽤变量 :如果 const 位于⼩星星的左侧,则 const 就是⽤来修饰指针所指向的变量,即指 针指向为常量;如果 const 位于⼩星星的右侧,则 const 就是修饰指针本身,即指针本身是常量。 const 应⽤到函数中 :作为参数的 const 修饰符:调⽤函数的时候,⽤相应的变量初始化 const 常量,则在函数体 中, 按照 const 所修饰的部分进⾏常量化,保护了原对象的属性 。 [ 注意 ] :参数 const 通常⽤于参数为指针或引⽤ 的情况; 作为函数返回值的 const 修饰符:声明了返回值后, const 按照 " 修饰原则 " 进⾏修饰,起到相应的保护作 ⽤。 const 在类中的⽤法 : const 成员变量, 只在某个对象⽣命周期内是常量,⽽对于整个类⽽⾔是可以改变的。 因为 类可以创建多个对象,不同的对象其 const 数据成员值可以不同。 所以不能在类的声明中初始化 const 数据成员, 因为类的对象在没有创建时候,编译器不知道 const 数据成员的值是什么。const 数据成员的初始化只能在类的构 造函数的初始化列表中进⾏。 const 成员函数: const 成员函数的主要⽬的是防⽌成员函数修改对象的内容 。要注 意,const 关键字和 static 关键字对于成员函数来说是不能同时使⽤的,因为 static 关键字修饰静态成员函数不含 有 this 指针,即不能实例化, const 成员函数⼜必须具体到某⼀个函数。 const 修饰类对象,定义常量对象 :常量对象只能调⽤常量函数,别的成员函数都不能调⽤。 补充: const 成员函数中如果实在想修改某个变量,可以使⽤ mutable 进⾏修饰。成员变量中如果想建⽴在整个类 中都恒定的常量,应该⽤类中的枚举常量来实现或者 static const 。 C ++ 中的 const 类成员函数(⽤法和意义) 常量对象可以调⽤类中的 const 成员函数,但不能调⽤⾮ const 成员函数; (原因:对象调⽤成员函数时,在形 参列表的最前⾯加⼀个形参 this ,但这是隐式的。 this 指针是默认指向调⽤函数的当前对象的,所以,很⾃然, this 是⼀个常量指针 test * const ,因为不可以修改 this 指针代表的地址。但当成员函数的参数列表(即⼩括号) 后加了 const 关键字( void print() const; ),此成员函数为常量成员函数,此时它的隐式 this 形参为 const test * const,即不可以通过 this 指针来改变指向对象的值。⾮常量对象可以调⽤类中的 const 成员函数,也可以调⽤⾮ const 成员函数
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/853552.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号