一、for语句的升级(解决循环变量浪费空间的问题)
c语言中c89
#include
int main()
{
int i;
for(i=1;i<100;i++)
{
}
for(i=5;i<200;i++)
{
}
return 0;
}
c99已经做了优化,可以
for(int i=0;i<100;i++)
c++中:
#include
using namespace std;
int main()
{
for(int i=0;i<100;i++)//目的是节省空间
{
}
//freach
int array[5]={1,2,3,4,5};
for(int temp:array)
{
cout<< temp << endl;
}
char src[100]="hello world";
//char *src="hello world";
for(char temp:src)
{
if(temp!='\0')
{
cout << temp <<endl;
}
else
{
break;
}
}
return0;
}
二、关键字的升级
1、 register:将修饰变量,尽可能的保存到CPU内部寄存器中,从而省去了抓取数据的时间,提高程序运行速率。
//使用注意事项:
(1)只能修饰局部变量,不能修饰函数和全局变量。
(2)register修饰的变量,不能再用&获取该变量的地址;(有可能该变量保存在CPU内部寄存器中)。
(3)register修饰的变量,一定是CPU所接受的数据类型。(有的CPU不支持浮点型运算)
//使用场景:频繁访问的变量;
//volatile关键字
//作用:防止编译器优化(将变量优化到寄存器中(寄存器存在边际效应))
//使用场景:访问硬件时,所使用的全局变量;
volatile register int index;
c++的优化:当对register变量取地址时,会将该变量重新保存到内存中
2、outo:自动变量,(所在函数结束之后释放空间)。
c++优化内容:auto 类型推导 必须初始化
auto num1=5;
auto ptrl ="hello world";
int array[5]={1,2,3,4,5};
for(auto temp: array)
{
cout << temp <<endl;
}
3、typedef关键字
语法作用:给数据类型重命名
工程应用:1:提供可读性;2:提高移植性
//函数名命名规则:解决的是函数功能可读性,无法解决形参的可读性
typedef unsigned int Int;
Int num;
typedef 存在一个问题 :重命名函数指针时,可读性差。
typedef int (*P_FUNC)(int,int);
P_FUNC p_add = add;//正确写法
int (*p_add)(int,int );//p_add函数指针变量
p_add = add;
p_add(5,6);
c++优化:using 类型重命名
using P_FUNC =int (*)(int,int);
P_FUNC p_add=add;
4、const 关键字:修饰变量:该变量为只读变量
工程引用的作用:修饰函数形参,保存实参在函数执行过程中不能被修改
//const处理过程,在编译过程中处理
const int num=5;
int *p=#
*p=7;
printf("num=%d\n",num);
const 离谁近就修饰谁,谁就不能改变。
const int *p=#//1
int * const p=#//2
p++;//3
(*p)++;//4
num++;//5
//1写法,4会显示语法错误;2写法,3会显示语法错误
c++优化内容:const修饰的变量是常量
constexpr :#define
//在预处理阶段处理,比宏更安全,没有额外开销
作用:值不会改变,并且在编译过程中就得到计算结果的表达式
5、 新类型 bool:提高程序可读性
bool flag = false;
while (flag ==true)
{
}
三、c++中三目运算符返回的是变量本身,所以可以作为左值使用
int a=10;
int b=20;
(a>b?a:b)=90;//相当于给b赋值90