当前位置: 首页 > news >正文

宏auto关键字(C++基础)

宏可以实现对语句的同义替换,简单来说就是预处理阶段、编译前的替换(包括符号,变量等)。

#define LOG(x) std::cout << x << std::endl; 
LOG("hello")

可以正常使用。

下面通过上图中借用不同开发模型设置的预处理器定义可以完成对代码的自动化,就比如可以完成在调试情况下输出控制台信息,而在开发环境下不输出。

#ifdef LHX_DEBUG
#define LOG(x) std::cout << x << std::endl; 
#else LHX_RELEASE
#define LOG(x)
#endif

这样使用ifdef可能有点问题(我也不知道什么问题,视频说的),所以换成下面的形式:

#if LHX_DEBUG
#define LOG(x) std::cout << x << std::endl; 
#elif LHX_RELEASE
#define LOG(x)
#endif

使用if 0语句会让被包裹的语句失效:

宏对调试很有帮助?不太懂很有帮助体现在哪里。

auto关键字

使用auto关键字放在声明类型的位置,可以不用指定特定类型,编译器自动来进行调整。

好处:很方便,在某些情况下简化开发。

坏处:滥用会导致代码可读性差,并且出错后难以调整。

如果是临时使用的变量,并且比较复杂,使用auto较为方便,如果需要大段代码使用,最好还是指明类型,增强代码的可读性,下图代码中需要保持一个良好的习惯,在类型位置和大括号前,经常性的加上const,程序可以顺利运行,但其实没有必要,因为类型也并不复杂。

const char* GetName(){
	return "lhx";
}//需要加上const	
    auto a = GetName();
    auto b = a;
	LOG(b)

一般用于如下场景:

class DeviceManager {
private:
	std::unordered_map<std::string,std::vector<Device*>> m_Devices;
public:
	const std::unordered_map<std::string, std::vector<Device*>>& getDevice() const {
		return m_Devices;
	}
};
int main(){
	using DeviceMap = std::unordered_map<std::string, std::vector<Device*>>;
	typedef std::unordered_map<std::string, std::vector<Device*>> DeviceMap;
	DeviceManager dm;
	const auto& devices = dm.getDevice();
	auto devices = dm.getDevice();
}

在不想使用using和typedef的情况下,来短暂的使用auto关键字·,或者在迭代器中短暂的使用,发现非常的方便,记得带上&和const来避免复制!!

最后要注意在方法中返回&的话记得加上const,这个是要多处对应的,涉及到的时候一定要多处检查。

http://www.dtcms.com/a/9018.html

相关文章:

  • GPT-4技术解析:与Claude3、Gemini、Sora的技术差异与优势对比
  • linux循环之until循环
  • 2023年度总结报告
  • 【并查集】一种简单而强大高效的数据结构
  • Spring Boot 生成与解析Jwt
  • Qt区分左右Shift按键
  • Python爬虫——Urllib库-3
  • 基于chatgpt的聊天机器人
  • 如何保证 HTTPS 证书的有效性?
  • SpringCloud2023最新版本该如何进行组件选型?
  • 飞桨(PaddlePaddle)Tensor使用教程
  • TensorFlow
  • 总结虚拟机的安装步骤:
  • Swift SwiftUI 学习笔记 2024
  • 【AI绘画】免费GPU Tesla A100 32G算力部署Stable Diffusion
  • 认识事物的几个阶段 GPU学习
  • HarmonyOS—配置编译构建信息
  • 利用Python爬取高德地图全国地铁站点信息
  • 【嵌入式——QT】QTableWidget
  • canvas签名页面跟着滑动bug
  • 2023年第十四届蓝桥杯大赛软件类省赛C/C++大学A组真题
  • 计算机网络面经-拥塞控制的乘法减小和加法增大
  • 文物藏品信息管理系统的优势
  • unity学习(49)——服务器三次注册限制以及数据库化角色信息4--角色信息数据库化
  • 乌鸡的身高
  • SpringBoot+Vue+MySQL:装修管理新架构探索
  • gpt批量工具,gpt批量生成文章工具
  • 【比较mybatis、lazy、sqltoy、mybatis-flex操作数据】操作批量新增、分页查询(二)
  • SpringMVC 中的常用注解和用法
  • 一文掌握:电力管理系统该的功能和界面设计