c++新特性包括:内嵌函数,按引用传递变量,默认的参数值,函数重载(多态)以及模板函数。
1. 内嵌函数。(主要用于区别常规函数,组合方式的不同)
常规函数的调用,使程序跳到另一个地址(函数的地址),并在函数结束时返回。典型实现:执行到函数调用指令时,程序将在函数调用后立即存储该指令的内存地址,并将函数参数复制到堆栈,跳到标记函数起点的内存单元,执行函数代码,然后跳回到地址被保存的指令处。来回跳跃并记录跳跃位置意味着使用之前的函数需要一定的开销。
内嵌函数就是关掉这一调用,执行速度比常规函数稍快,但代价就是需要占用更多内存。如果程序在10个不同的地方调用同一个内嵌函数,则该程序将包含该函数代码的10个副本。
使用该特性,必须采取的下述措施之一:
在函数声明前加上关键字inline;
在函数定义前加上关键字inline;
内嵌函数不应过大,而且它也无法递归使用。
2.新的复合类型——引用变量。引用就是已定义的变量的别名。有点类似typedf,主要用途是用作函数的形参。通过将引用变量用作参数,函数将使用原始数据,而不是其副本。引用也为函数处理大型结构提供了一种非常方便的途径。
使用:
int rats;
int &rodents = rats;
其中,&不是地址运算符,而是类型标识符的一部分。int &指的是指向int的引用。上述引用声明允许rats和rodents互换,它们指向相同的值和内存单元。
(可自己代码验证)
附:必须在声明引用变量时进行初始化
上述是左值引用,c++11还有右值引用。这种引用可以指向右值,是使用&&声明的:
double && rref = std::sqrt(36.00);
double j = 15.0;
double && jref = 2.0*j + 18.5;
std::cout << rref << ‘\n’; //display 6.0
std::cout << jref << ‘\n’ //display 48.5
目的在于:让库设计人员能够提供有些操作的更有效实现
- 默认参数(当函数调用中省略了实参时,自动使用的一个值)
例:int harpo(int n, int m = 4, int j = 5);
当发生下列调用时:
beeps = harpo(2); //same as harpo(2, 4, 5)
beeps = harpo(1,8); //same as harpo()1,8,5)
beeps = harpo(8,7,6); //no default arguments used
明显,至少一个要一个实参,其他参数,函数能填充进去。
4.多态(面向对象的3大特性之一。封装,多态,继承)
简单来说,就是同一个函数,使用不同的参数,行使的功能不同。
例:void setBuff(const char *str, int width)
void setBuff(double d, int width, int n)
void setBuff(int i, int width)
当输入不同参数
setBuff( “caiji”, 2)
setBuff(2.1, 2, 2)
setBuff(2, 2)
这些函数的功能是不一样的。
函数模板
使用泛型来定义函数,通过将类型作为参数传递给模板,可使编译器生成该类型的函数
例:include
template //or typename
void Swap(T &a, T &b)
{
int temp;
temp = a;
a = b;
b = temp;
}int main()
{
using namespace std;
int i = 10;
int j = 20;
cout << “i, j = ” << i << “, ” << j << “.\n”;
……
}