浅谈const, 引用(&) ,内联函数(inline)的用法。

本文介绍了C++中const的用法,包括常量的特性,存储位置,以及常量对象的限制。接着讨论了引用的概念,强调其必须初始化且不可改变,以及与指针的区别。最后,探讨了内联函数的原理和优势,如避免栈操作、提高效率,同时指出其潜在的代码膨胀问题和使用场景建议。

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

const

在C语言中,const修饰的变量被称为常变量,编译阶段,不能做左值,其他处理和变量一样。

在C++中,const修饰的变量被称为常量,在编译阶段,把用到常量的地方替换成常量初始化的值

                注意:1.常量一定要初始化   2.不允许常量做左值  3.不允许间接修改, 杜绝间接访问来修改常量风险 。

全局变量:

     在C语言中,const修饰的全局变量,存放在globe段

      在C++中,const修饰的全局变量,存放在local段

常函数:

   常对象不能调用普通方法。

class Test
{
public:
	Test(int a) :ma(a){}
	void Show()const//_thiscall  Test* const this  ==> const Test* const this
	{
		std::cout << "ma:" << ma << std::endl;
	}
private:
	int ma;
};

int main()
{
	const Test test(20);//常对象 
	test.Show();
}

引用(&)

   引用又称为“别名”,一定是要初始化的

int a = 10;
int &b = a; //b保存的是a的地址

注意:1.一定要初始化;

            2.引用不能引用不能取地址的数据;

int &a = eax;//因为寄存器没有地址,所以错误

            3.引用不能改变。

            4.引用只能引用 引用常量所引用的数据

        引用的底层是以指针的方式来支持引用的,在引用使用的地方,系统自带解引用。

  引用和指针的区别:

●指针是一个实体,而引用仅是个别名;

●引用只能在定义时被初始化一次,之后不可变;指针可变;引用“从一而终”,指针可以“见异思迁”;

●引用没有const,指针有const,const的指针不可变;(具体指没有int& const a这种形式,而const int& a是有 的, 前者指引用本身即别名不可以改变,这是当然的,所以不需要这种形式,后者指引用所指的值不可以改变)

●引用不能为空,指针可以为空;

●“sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身的大小;

内联函数(inline)

     在编译阶段处理,在调用点直接展开。

     inline函数和static修饰的函数的相同:都是本文件可见。

     inline函数和static修饰的函数的区别:

            1.内联函数不开栈,没有开辟和清理栈的开销。

               static修饰的函数有栈的开辟和销毁。

           2.inline函数在编译阶段调用点展开。

                static是一个函数符号,在local段

      inline函数和宏的区别:

            inline:在编译阶段,有词法,语法,词义的分析,所以存在类型检查  安全检查

              宏:在预编译阶段进行宏替换,不安全。

               因此,inline是一种更安全的宏。

   注意事项:

           1.inline函数实现是在.h文件中。

            2.inline只在Release版本中从在。

            3.递归,循环,switch中不能用内敛。

             4.内联只是给编译器的一个建议。

inline void Revese_Print(int arr[], int len)
{
	if (len == 0)
		return;
	std::cout << arr[len - 1] << " ";
	Revese_Print(arr, len - 1);
}//内联不会实现

             5.内联是基于实现的关键字,不是基于声明中/。

inline int Sum(int, int);//无作用,不能再声明中添加
inline int Sum(int a, int b)//正确
{
	return a + b;
}

内联函数的缺点:以代码膨胀为代价,空间换时间。

建议:

     1. 开栈的开销 > 执行的开销     建议使用内联函数

     2.开栈的开销 < 执行的开销      不建议使用内联函数

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值