std::source_location 可获取文件名、行号、列号和函数名。通过默认参数自动捕获调用位置,常用于日志、断言等场景,信息在编译期确定,性能开销极小,取代传统宏实现,代码更安全简洁。
source_location 是 C++20 引入的一个实用工具,定义在 头文件中。它允许程序在运行时或编译期获取当前代码的源码位置信息,比如文件名、行号、函数名等。这个功能特别适用于日志记录、调试断言、错误追踪等场景。
通过 std::source_location,你可以获取以下信息:
这些信息是静态获取的,也就是说,在调用点自动填充,无需手动传参。
最常见的用法是将其作为函数参数的默认值,利用编译器自动推导当前位置:
#include#include #include void log(std::string_view message, std::source_location loc = std::source_location::current()) { std::cout << "文件: " << loc.file_name() << "\n" << "行号: " << loc.line() << "\n" << "函数: " << loc.function_name() << "\n" << "消息: " << message << "\n\n"; } void some_function() { log("发生了一个日志事件"); }
输出类似:
文件: main.cpp你可以用 source_location 增强自定义断言,让错误信息更清晰:
#define ASSERT(expr) \
do { \
if (!(expr)) { \
std::cerr << "断言失败: " #expr "\n" \
<< "文件: " << std::source_location::current().file_name() << "\n" \
<< "行号: " << std::source_location::current().line() << "\
n" \
<< "函数: " << std::source_location::current().function_name() << "\n"; \
std::terminate(); \
} \
} while(0)
这样当断言触发时,能立刻定位到出错位置,极大提升调试效率。
std::source_location::current() 是一个特殊的函数,虽然看起来像普通函数调用,但它返回的是编译期常量。这意味着位置信息是在编译时确定的,性能开销极小,几乎可以忽略。
注意:尽管信息是编译期生成,但对象本身通常在运行时构造,不过现代编译器会高度优化这类操作。
基本上就这些。C++20 的 source_location 提供了一种类型安全、零成本的方式来获取源码位置,取代了过去依赖宏如 __FILE__ 和 __LINE__ 的方式,写法更简洁,语义更清晰。
# 工具
# ai
# c++
# ios
# stream
# 常量
# 对象
# 事件
# column
# 行号
# 更清晰
# 的是
# 是一个
# 发生了
# 是在
# 你可以
# 可以用
# 适用于
# 将其
相关文章:
官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站
如何通过万网虚拟主机快速搭建网站?
建站主机无法访问?如何排查域名与服务器问题
制作网站的软件下载免费,今日头条开宝箱老是需要下载怎么回事?
深圳网站制作的公司有哪些,dido官方网站?
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
建站之星多图banner生成与模板自定义指南
C#怎么使用委托和事件 C# delegate与event编程方法
如何在万网自助建站平台快速创建网站?
专业公司网站制作公司,用什么语言做企业网站比较好?
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
音响网站制作视频教程,隆霸音响官方网站?
小型网站建站如何选择虚拟主机?
动图在线制作网站有哪些,滑动动图图集怎么做?
如何快速搭建响应式可视化网站?
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
制作国外网站的软件,国外有哪些比较优质的网站推荐?
建站之星如何助力网站排名飙升?揭秘高效技巧
网站制作大概多少钱一个,做一个平台网站大概多少钱?
开封网站制作公司,网络用语开封是什么意思?
常州自助建站:操作简便模板丰富,企业个人快速搭建网站
红河网站制作公司,红河事业单位身份证如何上传?
在线制作视频的网站有哪些,电脑如何制作视频短片?
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?
昆明网站制作哪家好,昆明公租房申请网上登录入口?
建站主机是什么?如何选择适合的建站主机?
如何彻底删除建站之星生成的Banner?
湖北网站制作公司有哪些,湖北清能集团官网?
如何快速生成凡客建站的专业级图册?
建站之星伪静态规则如何设置?
网站制作公司排行榜,四大门户网站排名?
公众号网站制作网页,微信公众号怎么制作?
香港服务器网站卡顿?如何解决网络延迟与负载问题?
无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?
如何高效完成独享虚拟主机建站?
如何用西部建站助手快速创建专业网站?
建站主机CVM配置优化、SEO策略与性能提升指南
中山网站制作网页,中山新生登记系统登记流程?
专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
建站主机是否等同于虚拟主机?
如何在阿里云完成域名注册与建站?
网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?
网站建设制作、微信公众号,公明人民医院怎么在网上预约?
视频网站制作教程,怎么样制作优酷网的小视频?
大连网站设计制作招聘信息,大连投诉网站有哪些?
建站之星客服服务时间及联系方式如何?
如何快速使用云服务器搭建个人网站?
建站主机数据库如何配置才能提升网站性能?
C++如何编写函数模板?(泛型编程入门)
*请认真填写需求信息,我们会在24小时内与您取得联系。