宏&&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,这个是要多处对应的,涉及到的时候一定要多处检查。

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想进大厂~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值