C++:从开始到放弃第二天
1.内联函数
概念:
以inline修饰的函数叫做内联函数。
下面是没有加Inline的时候,机器运行时的编程代码。
进行了压栈操作,导致系统开销加大,花费了更多的时间。
下面是加了inline的编程代码。
可以看到,用inline修饰的内联函数,在编译时会在调用的内联函数地方展开,没有压栈的开销。以空间为代价,提高了效率。
特性:
1.inline函数是一种以空间换时间的方法,省去了调用函数的额外开销。但是在函数较长的时候,最好不要使用Inline函数。
2.inline对于编译器来说只是一个建议,编译器会自动优化,如果定义的内联函数之中有嵌套或者循环,编译器优化时会直接跳过inline。
3.Inline不建议声明和定义分离,分离会导致链接错误。
4.c++中函数定义时用内联函数代替宏。
2.auto关键字
定义:
auto作为一个新的类型指示符来指示编译器,auto声明是编译器
在编译阶段推导而得来的。
例子:
int main()
{
int a = 10;
auto b = a;
auto c = 'a';
auto d = TestAuto();
cout << typeid(b).name() << endl;
cout << typeid(c).name() << endl;
cout << typeid(d).name() << endl;
system("pause");
//auto e; 无法通过编译,使用auto定义变量时必须对其进行初始化
return 0;
}
注意,auto在使用时必须要定义。
使用细则:
1.auto与指针和引用结合起来使用。在指向引用时必须要用auto&.
2.在同一行声明多个变量时,变量必须为同一类型。否则只对第一类型进行推导,同时用推导类型定义其他类型。
不能使用的场合
1.函数参数
2.声明数组
3.不能定义非静态类型成员变量。(?)
4.实例化模板不用auto作为模板参数。(?)
基于范围的for循环
由“:”分为两个部分
1.用于迭代的变量
2.被迭代的范围
int main()
{
int a[] = { 1, 2, 3, 4, 5 };
for (auto e : a)
cout << e << " "<<endl;
system("pause");
return 0;
}
适用范围
1.数组范围已经确定。
2.迭代对象实现+±-操作(?)
迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。
4.空指针 nullptr
在C++11提供了nullptr,用来代表一个指针空值常量。
注意
1.nullptr是作为关键字引入的,不需要头文件
2.sizeof(nullptr)与sizeof((void*)0)所占字节数一样
3.最好用nullptr表示空指针。