C++利用常量表达式在编译期操作字符串

在打log的时候,往往有这样的需求,要把当前代码文件的文件名打印出来。
最简单的就是输出__FILE__宏。但是__FILE__实际上是包括文件名的完整路径,比如这样:

/tmp/blablabla-XXXX-YYYY-ZZZZZZ/example.cpp

这样的输出太过冗长,我们需要的实际上只是example.cpp

这个时候要是老老实实地调API把example.cpp切出来当然不难,但是想想,输入__FILE__是编译时就确定了的,那么结果也应该可以在编译时确定啊,为什么要在运行时浪费时间去计算?

如果在C++11之前,要在编译时做这个就得依赖模板元编程。牺牲可读性用满屏的templatetypename去实现这么一个简单的功能,总有种得不偿失的感觉。

但是在C++11里,C++引入了名为constexpr(常量表达式)的特性,被constexpr修饰的函数,如果满足一定条件,其返回值是可以在编译时计算出来的,在生成的汇编中将不会包含这个函数的任何代码。

下面就是利用constexpr在编译时在完整路径中截取文件名的代码:

#include <cstdio>

constexpr const char *get_basename(const 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值