大家好鸭
上期我们谈论了C++的一些入门知识
这里接上期继续讲讲C++入门,没有看上期的同学可以看看上期
内联函数
相信大家在学习C语言的时候接触过,宏函数这个概念
比如我们可以写一个简单的宏函数,如下
#define ADD(x, y) ((x)+(y))
int main()
{
printf("%d\n", ADD(1, 2));
return 0;
}
像这样就是简单的使用宏函数
宏函数有以下优缺点
缺点
- 容易写错,语法坑多
- 不能调试
- 没有类型安全的检查
优点
- 没有严格的类型限制
- 不需要建立函数栈帧,减少开销
在C++中引入了内联函数取代了宏函数的功能
内联函数是指使用inline修饰的函数
inline int add(int a, int b)//内联函数
{
return a + b;
}
int add(int a, int b)//普通函数
{
return a + b;
}
内联函数会在调用的地方展开,替换函数调用
但内联函数对于编译器只是一种建议,当函数是一个递归函数或者是一个比较长的函数时,编译器会忽略inline修饰,当作正常函数处理
auto关键字
当变量类型过长的情况下,可以使用auto接收值或者变量,auto可以自动推导变量类型
例如
int main()
{
int a = 10;
auto b = a;//此时会自动推导b为int类型
auto c = 10.0;//此时会自动推导c为double类型
}
当auto作为引用时还是要加&
int main()
{
int a = 10;
auto& b = a;
}
当在同一行声明多个变量时,这些变量必须是相同的类型,否则编译器将会报错,因为编译
器实际只对第一个类型进行推导,然后用推导出来的类型定义其他变量。
int main()
{
auto b = 10,c=10.2;//该行会报错
}
还有两点需要注意
- 不能作为函数参数
- 不能用来声明数组
void add(auto a)//错误示范
{
}
int main()
{
auto a[] = { 1,2,3 };
}
auto更多的应用场景是结合接下来要讲的范围for一起使用
范围for
for循环后的括号由冒号“ :”分为两部分:第一部分是范围内用于迭代的变量,第二部分则表示被迭代的范围。
int main()
{
int a[] = { 1,2,3,4,5,6 };
for (auto b : a)
{
cout << b << " " ;
}
}
像这样使用
auto b在for循环中用与依次接受a数组中的值,循环内将b打印出来
这里当a数组的类型发生变化时,auto b是不需要改变的,b的类型会根据a数组类型变化而变化
我们还可以通过auto引用来改变a中的值
int main()
{
int a[] = { 1,2,3,4,5,6 };
for (auto& b : a)
{
b = b * 2;
cout << b << " " ;
}
}
另外还有3个要注意的点
- 范围for也可以正常的使用break,continue
- 范围for迭代的范围必须是确定的
- 范围for迭代的对象要实现++和==的操作
C++入门的一些知识就介绍到这里,本篇完