一、宏定义
1.单纯的文本替换
例1:
#define a 2+3
cout<<a*a<<endl;//等价于2+3*2+3=5+6=11
输出多少?
例2:
#define s(r) 3.14*r*r
cout<<s(10+5)<<endl;//等价于3.14*10+5*10+5=86.4
输出多少?
2.高级用法:
(1)多行宏定义
(2)set函数与get函数
(3)系统自带宏定义
(4)跨平台
二、头文件防卫式声明
在头文件添加宏定义的判断,即防卫式声明,避免头文件引用时的重复问题。
1.#pragma once
在有此标识的头文件仅会被编译器包含一次
2.
#ifdef _somefile.h
#define _somefile.h
....//声明、定义语句
#endif
二者区别:
#ifdef:由语法提供支持,针对代码片段注意不能同名宏,编译时间长,可跨平台
#pragma:由编译器提供保证,针对整个文件,编译速度较快,但头文件多次拷贝仍会包含,且无法支持跨平台与版本较旧的编译器
三、Auto关键字
1.auto :变量的自动类型推断,发生在编译期间,不会造成程序运行时效率降低,在声明变量时根据值的类型自动选择变量类型(声明时必须赋初值)
2.作用:在大型工程中遇见特别长的泛型名称时,可以更方便进行编程
3.auto遍历数组
int v[]={1,5,7,10,13,16};
for(auto x:v)
{
cout<<x<<endl;}
或者
for(auto x:{1,5,7,10,13,16})
{ cout<<x<<endl;}
本质:将数组中的每个元素依次拷贝至x中再进行打印,影响效率
因此我们可以使用引用来避免拷贝
int v[]={1,5,7,10,13,16};
for(auto &x:v)
{
cout<<x<<typeid(x).name()<<endl;//系统函数:typeid().name()可以返回变量,函数,类的数据类型名
}
宏定义 头文件防卫式声明 auto关键字
最新推荐文章于 2023-12-26 17:55:30 发布