C++的std::source_location如何使用_C++20中用于日志和断言的源码信息捕获


std::source_location在C++20中用于自动捕获文件名、行号、函数名等源码信息,通过current()获取调用点位置,支持日志和断言中无需手动传入__FILE__、__LINE__,提升调试效率。

c++的std::source_location如何使用_c++20中用于日志和断言的源码信息捕获

在C++20中,std::source_location 是一个轻量级的类,用于在编译时捕获源代码的上下文信息,比如文件名、行号、函数名等。它非常适合用在日志记录、断言、调试输出等场景,避免手动传入 __FILE__、__LINE__ 等宏。

基本特性与成员函数

std::source_location 提供了以下只读访问接口:

  • file_name():返回当前源文件路径(const char*)
  • line():返回当前行号(unsigned int)
  • column():返回列号(通常实现为1或未完全支持)
  • function_name():返回所在函数名(const char*),通常是经过修饰的名称(mangled)

这个类型是隐式构造的,通常通过 std::source_location::current() 获取当前位置信息,且该调用不会产生运行时开销(在优化后基本被常量替代)。

如何使用 source_location 记录日志

你可以将 std::source_location 作为默认参数传入日志函数,自动捕获调用点信息:

#include <iostream>
#include <string_view>
#include <source_location>
<p>void log(std::string_view message,
std::source_location loc = std::source_location::current())
{
std::cout << "[" << loc.file_name() << ":"
<< loc.line() << "] "
<< loc.function_name() << " - "
<< message << '\n';
}</p><p>void some_function() {
log("Something happened!"); 
// 输出: [main.cpp:xx] some_function - Something happened!
}</p>

注意:由于 function_name() 返回的是编译器内部的函数签名(可能包含模板、重载信息并被 mangling 处理),实际显示可能不够友好。可结合工具如 c++filt 解析,或仅用于调试。

FaceSwapper FaceSwapper

FaceSwapper是一款AI在线换脸工具,可以让用户在照片和视频中无缝交换面孔。

FaceSwapper 960 查看详情 FaceSwapper

在断言中使用 source_location 提供更详细的错误信息

自定义断言宏可以利用 source_location 避免重复写文件和行号:

#include <iostream>
#include <source_location>
#include <cassert>
<p>void assertion_failed(const std::source_location& loc) {
std::cerr << "Assertion failed at "
<< loc.file_name() << ":" << loc.line()
<< " in " << loc.function_name() << "\n";
std::abort();
}</p><h1>define MY_ASSERT(expr) \</h1><pre class='brush:php;toolbar:false;'>do { \
    if (!(expr)) { \
        assertion_failed(std::source_location::current()); \
    } \
} while(0)

void test() { MY_ASSERT(2 + 2 == 5); // 输出: Assertion failed at test.cpp:xx in test }

这种方式比传统宏组合更简洁,也更容易维护。

注意事项与限制

  • 编译器支持:需 C++20 支持,GCC 10+、Clang 10+、MSVC 19.29+ 基本可用
  • 函数名可读性:function_name() 返回值可能很长且难读,不适合直接展示给终端用户
  • 不能跨线程保存:虽然 source_location 是普通类型,但其内容依赖于调用点,若延迟使用仍反映原始位置
  • 默认参数限制:只能在函数调用时自动填充,无法在 lambda 或某些泛型上下文中直接捕获(除非显式传参)

基本上就这些。std::source_location 让日志和诊断信息变得更清晰、更自动化,是 C++20 中提升调试体验的小而美的特性。

以上就是C++的std::source_location如何使用_C++20中用于日志和断言的源码信息捕获的详细内容,更多请关注其它相关文章!


# 的是  # 海南视频营销推广营销  # 淘宝关键词排名差  # seo体系计划  # 百雀羚营销推广渠道  # 临淄网站建设素材  # 牛网站建设银行  # seo ju hyunsex  # 云营销优选乐云seo  # 宁波seo优化款式齐全  # seo 蜘蛛抓取  # 相关文章  # 你可以  # 是一个  # c++20  # 有什么好处  # 使用技巧  # 隐式  # 尼克  # 如何使用  # 行号  # stream  # ios  # c++  # ai  # 工具  # app 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894 】


相关推荐: 画质怪兽120帧安卓和平精英免费版  在J*a中如何实现在线问答与评分系统_问答评分项目开发方法说明  漫蛙manwa2网页版书签同步链接_漫蛙manwa多设备登录入口  2025考研成绩查询时间入口分享  Win10关闭UAC用户账户控制的方法 Win10降低安全提示等级【技巧】  苹果电脑如何快速截图并编辑 苹果电脑截屏标注快捷操作  猫眼电影app如何参与官方的抽奖活动_猫眼电影官方抽奖参与方法  QQ阅读小说搜索入口地址_QQ阅读小说搜索入口地址搜索在线阅读  MySQL多重关联查询:利用别名高效获取同一表的多个关联字段  邮政快递寄件查询入口 邮政快递收件查询入口  支付宝网页版在线入口 支付宝官网电脑登录入口  申通快递物流信息查询 申通快递包裹状态追踪  百度网盘网页入口链接分享 百度网盘官网入口网页登录  米侠浏览器插件无法启用怎么办 米侠浏览器扩展兼容性修复  热血江湖归来医师加点攻略  《微信》视频号原创声明开启方法  在React中正确处理HTML input type="number"的数值类型  B站怎么开|直播| B站|直播|申请需要什么条件【新手必看】  《浙里办》电子发票开具方法  SQL聚合查询、联接与筛选:GROUP BY 子句的正确使用与常见陷阱  b站如何剪辑视频_b站必剪app使用教程  Lar*el怎么实现全文搜索_Lar*el Scout集成Algolia教程  PHP页面重载后变量状态保持:实现用户档案连续浏览的教程  msn官方入口2025登录 msn官网2025直达首页入口  微信步数怎么刷_微信步数快速提升技巧  Highcharts雷达图径向轴数值标签实现教程  苹果手机聊天记录删除了如何恢复  漫蛙app官方版手机正版入口-漫蛙漫画manwa在线漫画正版入口  163邮箱登录入口官网 163.com邮箱登录入口  qq音乐官方网站入口_qq音乐在线听歌网页版链接  《海底捞》点外卖方法  大众点评了却看不到是怎么回事  快手缓存清理方法  全球各国上班时间表外贸邮件时间  sf漫画官网登录入口直达_sf漫画官方正版网址  OPPO A3 WiFi频繁断开怎么办 OPPO A3网络优化技巧  C++ switch case字符串_C++如何实现字符串switch匹配  VS Code的时间线(Timeline)视图:您的代码时光机  手机雨课堂网页版入口免登录 雨课堂网页版可点击直接进入  如何在Python中安全地将环境变量转换为整数并满足Mypy类型检查  CSS绝对定位与溢出控制:实现背景元素局部显示不触发滚动条  使用Python和NLTK从文本中高效提取名词的实用教程  《kimi智能助手》制作ppt教程  Word如何将文字快速转成表格 Word文本转换成表格功能使用技巧【效率】  优化响应式标题底部边框:CSS实现技巧与最佳实践  uc浏览器官网网页版使用 uc浏览器官网免费在线首页  Win10通知横幅停留时间修改 Win10自定义通知显示时长【技巧】  iPhone12是否要更新ios16  手机自动关机是怎么回事?如何修复?手机异常关机的原因排查与修复技巧  WooCommerce 购物车:始终显示所有交叉销售商品 

 2025-12-19

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.