C++——成员函数

本文详细解释了C++编程中new关键字用于堆内存分配、inline内联函数提高性能以及const与mutable在类成员变量保护和灵活修改之间的应用。通过实例说明了如何合理使用这些特性来增强代码的效率和安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                       参考资料:http://blog.chinaunix.net/uid-20135786-id-1976276.html


1、new关键字

        new创建类对象需要指针接收。

        new创建类对象使用完需delete销毁,因为编译器不会自动回收堆内存。

        new创建对象直接使用堆空间,局部对象一般在栈上,则不使用new创建。

        new对象指针用途广泛,比如作为函数返回值、函数参数等频繁调用场合并不适合new,就像new申请和释放内存一样。

2、inline关键字

        内联函数的意思是将函数的代码直接插入函数调用点,以取代函数调用,从而消除函数调用过程的开销,代价占用一定存储。是一种以空间换取时间的机制。有点类似于C语言中的#define。
语法1: inline 函数定义
语法2: 类中定义的成员函数自动为内联函数

语法3:inline 成员函数定义(在类外定义)

         inline 函数原则上放在头文件定义。这是因为内联函数需要展开,VS2013要求放在头文件中。放在头文件中方便编译器查找到内联内联函数的位置。

        内联函数不能直接取地址。

        内部成员函数的重载,函数指针,明确了参数,根据参数选择合适的重载了的函数。

3、const与mutable

void showxy() const; //限定内部成员不被修改。showxy函数不可以修改类内部成员的值。

void resetxy(); //没有const属性,可以修改任何成员变量属性。

mutable int z;//变量z不受const成员函数的约束。

mutable关键字约束变量不受const约束。

const int d=0;//d必须初始化。

函数const可以限制不对成员变量修改。

mutable int e;//e变量可以初始化,也可以不初始化,e不受const关键字限制。


const关键字修饰变量和修饰函数的分析:

        C++中const关键字用来表示一个常量,同时const也用来修饰函数。

        const所修饰的函数只能是类的成员函数,mutable修饰的变量只能是类的成员变量。因为const所修饰的函数中,要由编译器负责保护类的成员变量不被修改。而相对的,mutable则是用来修饰类的成员变量,让该变量在const所修饰的成员函数中可以被修改。所以const修饰的函数只能是类的成员函数,mutable修饰的变量只能是类的成员变量。

为什么要保护类的成员变量不被修改?

        保护类的成员变量不在成员函数中被修改,是为了保证模型的逻辑正确,通过用const关键字来避免在函数中错误的修改了类对象的状态。并且在所有使用该成员函数的地方都可以更准确的预测到使用该成员函数的带来的影响。而mutable则是为了能突破const的封锁线,让类的一些次要的或者是辅助性的成员变量随时可以被更改。

        不使用const和mutable关键字当然没有错,const和mutable关键字只是给了建模工具更多的设计约束和设计灵活性,而且程序员也可以把更多的逻辑检查问题交给编译器和建模工具去做,从而减轻程序员的负担。如果开发过程有比较严格的迭代过程,使用这两个关键字应该更能体现出他们的作用。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值