C++有添加的新的特性也有与C语言的一些区别,为了方便学习,就特别对重要的一些特性和区别进行学习。
此次学习的是:1、函数的默认参数,2、inline函数,3、函数重载
1、C++的函数默认参数:在函数声明或定义时候,给函数参数预先赋值,当函数调用有空缺参数时,就将该值作为默认参数传入。
(1)默认值必须从右向左一次赋值,不可跳过。
void fun(int a, int b, int c=20);
int main()
{
fun(11,12);
return 0;
}
因为我们传递参数的时候,都是从左往右传递,如果我们只给b赋值,而传递了两个参数,那么第三个参数就没有被被初始化了,这是不允许的。
(2)函数默认值只在单文件有效。
(3)编译期确定默认值传入。
2、C++的内联函数:编译器会把该函数的代码副本放置在每个调用该函数的地方。
(1)inline函数这样定义可能有点类似宏定义但是他们还是有区别的。
(2)编译期在调用点展开,作用域为单文件
(3)inline只是对编译器的一种建议,递归类的函数不可被处理成内联函数。
3、函数重载:重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(实现)不相同。
(1)即函数名相同,参数列表不同,作用域相同。
bool compare(int a, int b)
{
cout << "bool compare(int a, int b)"<<endl;
return a > b;
}
bool compare(char a, char b)
{
cout << "bool compare(char a, char b)"<<endl;
return a > b;
}
bool compare(float a, float b)
{
cout << "bool compare(float a, float b)" <<endl;
return a > b;
}
int main()
{
compare(10, 20);
compare('a', 'b');
//compare(10.2, 20.3);
return 0;
}
运行结果如下图:(被我注释掉的关于隐式类型转换的问题)
(2)可以重载原因是因为与C语言生成的符号不同。
当我们使用C++时候,如果发生函数链接错误是如下结果:
当我们使用C语言.c文件时候,如果发生函数链接错误是如下结果:
即:c++ 函数符号=函数名+参数列表
c语言 函数符号=_函数名