内联函数inline的使用
Inline int max(int a, int b)
{
Return a > b? a :b;
}
#define MAX(a, b) (a) > (b) ? (a) : (b)
内联函数与带参数宏的区别?
内联函数调用时,要求实参和形参的类型一致,另外内联函数会先对实参表达式进行求值,然后传递给形参;而宏调用时只用实参简单地替换形参。
内联函数是在编译的时候、在调用的地方将代码展开的,而宏则是在预处理时进行替换的。
在C++中建议采用inline函数来替换带参数的宏。
函数的重载(overload):相同的作用域,如果两个函数名称相同,而参数不同,我们称之为重载。
函数重载的不同形式:
形参数量不同
形参类型不同
形参的顺序不同
形参数量的形参类型都不同
调用重载函数时,编译器通过检查实际参数的个数、类型和顺序来确定相应的被调用函数。
Name managling与extern “C”
Name managling 这里把它翻译为名字改编
C++为了支持重载,需要进行name managling
Extern “C” 实现C与C++混合编程
如:
#ifdef __cpluscplus
Extern “C”
{
#endif
......
#ifdef __cpluscplus
}
#endif
带默认形参值的函数
1.函数没有声明时,在函数定义中指定形参的默认值
2.函数即有定义又有声明时,声明时指定后,定义后就不能再指定默认值
3.默认值得定义必须遵守从右到左的顺序,如果某个形参没有默认值,则它左边的参数就不能有默认值。
如:
Void funcl(int a, double b = 4.5, int c = 3); //合法
Void funcl(int a = 1, double b, int c = 3); // 不合法
函数调用时,实参与形参按从左到右的顺序进行匹配
C++中的命名空间
在C语言中只有一个全局作用域
在C语言中所有的全局标识符共享同一个作用域
标识符之间可能发生冲突
C++中提出了命名空间的概念
命名空间将全局作用域分成不同的部分
不同命名空间中的标识符可以同名而不会发生冲突
命名空间可以相互嵌套
全局作用域也叫默认命名空间。
C++中命名空间的使用:
使用整个命名空间:using namespace name;
使用命名空间中的变量:using name::variable;
使用默认命名空间中的变量: ::variable
默认情况下可以直接使用默认命名空间中的所有标识符。