C++基础知识学习,函数的各种特殊用法,inline函数,const的特殊用法

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_40666620/article/details/102761021
函数声明时,可以只有参数类型,没有参数名字
void testMethod1(int, string);
函数实现时,用不到的参数,可以只有参数类型,没有参数名字
void testMethod1(int a, string)
{
	cout << a << endl;
}
函数的后置返回类型
auto testMethod2(int a, char b)->void;
auto testMethod2(int a, char b)->void
{
	cout << a << ' ' << b << endl;
}

内联函数

写法,函数前面加上"inline"
使用条件:函数体很小,调用很频繁,提升效率

  • 1、编译器试图在编译期间,用函数本体替换掉调用方法
  • 2、但是只是开发者给编译器提的建议,是否替换,决定权在编译器
  • 3、内联函数的方法体就要放在头文件中,和普通函数声明和方法体分开正好相反,因为要找到函数体去替换函数调用

缺点:会带来代码膨胀的问题,所以内联函数函数体要少
注意:各种编译器对inline的处理各不相同,inline函数尽量简单。循环,分支,递归尽量不要出现,否则很可能拒绝执行
constexpr void func();可以看成特别简单的inline
#define 宏展开和inline类似,但是有区别

函数杂合用法总结

  • 1、void函数可以返回另一个返回类型为void的函数
void testMethod3()
{

}
void testMethod4()
{
	return testMethod3();
}
  • 2、函数返回指针返和回引用的问题

2.1、指针

int* testMethod5()
{
	int a = 12;
	return &a;
}
int main()
{
//仔细想一想,返回的临时变量的地址,已经被系统回收了,轻则几个小时崩溃,重则立即崩溃	
	int* ptr = testMethod5();
}

2.2、引用

int& testMethod6()
{
	int a = 12;
	cout << &a << endl;
	return a;
}
int main()
{
	//也是内存已经被回收
	int& a2 = testMethod6();
	cout << &a2 << endl;
	//用值来接收引用可以的
	int a3 = testMethod6();
	cout << &a3 << endl;
}
  • 3、没有形参写void也是可以的
void testMethod7(void)
{

}
  • 4、如果我们没有用到某个函数的话,可以只声明
  • 5、普通函数可以声明多次,只能定义一次,一般.cpp定义文件,会引用.h声明文件
  • 6、返回多个值,形参使用引用&,在C++中更习惯使用引用来代替指针,防止拷贝造成效率降低,并且提倡使用引用,和java规范正好相反

const char *p ,char const *p ,char * const p

  • const char *p = char const *p
const char *p = char const *p
char p[]{ "i love china" };
const char* constPtr = p;
constPtr++;		//const 指针可以改变指向,但是不能修改内容
*p = 'Y';

因为毕竟const修饰的是 *p,是p指的内容,而不是p本身

  • char * const p
//char * const p;,p本身不能改变,但是指向的内容可以改变
//因为const修饰的是p,而不是p所指向的内容*p
char* const constPtr2 = p;
*constPtr2 = 'W';
//const char * const p;

结论:总之,const修饰的东西不能改变

  • 特殊用法,
//int& a = 31;
const int& a = 31;
//既然可以使用,肯定时分配了内存的,所以有得出结论,引用是分配了内存的
//就跟常量一样了
  • 重要应用,C++提倡
形参中添加const,不让修改,好的写法,推荐void method(const char* p);
好处多动:
1、可以防止无意中修改了形参值,导致外界改变
2、实参类型可以更灵活,参数为(char *p)的,不能传递进去const char *p,
但是(const char* p)可以传进去char *p,也可以const char* p,
也可以直接'a'都可以调用,所以干脆能加上的都加上

猜你喜欢

转载自blog.csdn.net/qq_40666620/article/details/102761021