内联函数(inline)是C++一种重要的构造函数的方法。内联函数可以消除函数调用的开销(即函数压栈),以空间换时间,提高程序运行的效率。在编译时将函数调用处用函数体替换,类似于C语言中的宏展开。具有参数类型检查的功能,相当于宏的上位替代。
//头文件中完成定义与声明
inline int ADD(int a = 0, int b = 0, int c = 0)
{
return a + b + c;
}
//在引用该头文件的cpp源文件中直接进行使用
int c = ADD(23, 45, 67);
注:如果在类中直接定义,不需要用inline修饰,编译器自动化为内联函数。
如:
class ClassName
{
//...
//...
//编译器自动化将其化为inline内联函数
int ADD(int a = 0, int b = 0, int c = 0)
{
return a + b + c;
}
//...
//...
}
auto是C++中的一种类型说明符,它允许编译器从变量的初始化器中推断出变量的类型。它是在C++11中引入的,用于简化变量的声明,特别是当类型很复杂或很难拼写时。
利用typeid().name()函数可以获得表达式的类型
int x = 10;
cout << typeid(x).name() << endl;
auto a = x;
cout << typeid(a).name() << endl;
auto* b = &x;
cout << typeid(b).name() << endl;
auto c = &x;
cout << typeid(c).name() << endl;
auto& d = x;
cout << typeid(d).name() << endl;
1.不能作为函数的参数
// 此处代码编译失败,auto不能作为形参类型,因为编译器无法对a的实际类型进行推导
void TestAuto(auto a)
{
}
2.不能直接用来声明数组
void TestAuto()
{
int a[] = {1,2,3};
auto b[] = {4,5,6};
}
3.为了避免与C++98中的auto发生混淆,C++11只保留了auto作为类型指示符的用法
4.auto在实际中最常见的优势用法就是跟以后会讲到的C++11提供的新式for循环,还有lambda表达式等进行配合使用。
基于范围的for循环是C++11引入的一种新的循环语句,它可以遍历一个序列中的所有元素,而无需使用迭代器或指针。它的语法如下:
for (declaration : range_expression)
{
statement
}
其中,declaration 是一个定义,用于定义一个新变量,该变量将用于存储序列中的每个元素。range_expression 是一个表达式,它表示要遍历的序列。statement 是要执行的语句,它将针对序列中的每个元素执行一次。
例如,以下代码使用基于范围的for循环遍历一个数组:
int arr[] = {1, 2, 3, 4, 5};
for (int i : arr)
{
std::cout << i << ' ';
}
输出:
1 2 3 4 5
在这个例子中,declaration 是 int i,它定义了一个新变量 i,该变量将用于存储数组中的每个元素。range_expression 是 arr,它表示要遍历的数组。statement 是 std::cout << i << ' ',它将打印数组中的每个元素。
使用条件:
for循环迭代的范围必须是确定的,对于数组而言,就是数组中第一个元素和最后一个元素的范围;对于类而言,应该提供begin和end的方法,begin和end就是for循环迭代的范围。