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

const作用、优缺点及注意事项

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

const作用、优缺点及注意事项

作用
  • 修饰变量,变量只读不可修改,定义时必须初始化;
  • 修饰函数形参,函数内部不可改变形参的值;
  • 类中使用const
  • const修饰成员变量,表示成员变量不能被修改,同时只能在初始化列 表中赋值
  • const修饰成员函数:
    1、该函数不能改变对象的成员变量
    2、不能调用非const成员函数,因为任何非const成员函数会有修改成员变量的企图
    3、const的成员函数只能被一个const类对象调用。即const类对象只能调用const成员函数
    4、const关键字不能与static关键字同时使用,因为static关键字修饰静态成员函数,静态成员函数不含有this指针,即不能实例化,const成员函数必须具体到某一实例。
  • const修饰类对象
    1、对象的任何成员都不能被修改
    2、只能调用const成员函数
优点

1、编译器可以对const进行类型安全检查

const int x="aaaaaaaa";//编译不通过
#define Y "aaa" //无类型检查

2、可以节省空间,避免不必要的内存分配,因为编译器通常不为const常量分配内存空间,而是将它保存在符号表

注意事项

1、修饰变量必须初始化,即定义时必须初始化

const int a;//错误。必须初始化
const myClass * ts;//错误,必须new
const int b = 0;

2、类的构造函数不能用const修饰,因为const无法修改成员变量
3、静态成员函数不行。tatic静态成员是属于类的,而不属于某个具体的对象,所有的对象共用static成员。this指针是某个具体对象的地址,因此static成员函数没有this指针。而函数中的const其实就是用来修饰this指针的,意味this指向的内容不可变,所以const不能用来修饰static成员函数
4、以下情况可以修改类的成员变量

#include
using namespace std;
class B
{
public:
    B() { }
public:
    int m_iNum=0;
};
void foo()
{
    const B b1;
    // 可以做如下转换,体现出转换为指针类型
    B* b2 = const_cast(&b1);
    // 或者左侧也可以用引用类型,如果对b2或b3的数据成员做改变,就是对b1的值在做改变
    B& b3 = const_cast(b1);
    b2->m_iNum = 200;    //fine
    cout << b1.m_iNum << endl;
    b3.m_iNum = 300;    //fine
    cout << b2->m_iNum << endl;
}
int main(int argc, char* argv[])
{
    foo();
    return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/352537.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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