You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

libstdc++中std::thread::id的两个构造函数是否均符合C++标准?

std::thread::id 额外公开构造函数的问题解析
  • cppreference 的内容没过时,explicit id(native_handle_type __id) 这个构造函数不属于C++标准,是libstdc++自行添加的扩展实现。

明明std::thread是std::thread::id的友元,还要把这个构造函数设为公开,主要有两个原因:

  1. 适配更多使用场景:部分第三方代码或库内部工具需要直接从原生线程句柄生成std::thread::id对象,公开构造函数可以省去友元访问的限制,让这类操作更直接便捷。
  2. 简化内部实现:libstdc++里不止std::thread一个模块需要完成原生句柄到thread::id的转换,如果给每个模块都添加友元声明反而繁琐,直接公开构造函数能降低维护成本,实现起来更省心。

需要注意的是,C标准仅规定std::thread::id的默认构造函数为公开接口,正常获取thread::id应该通过std::thread的get_id()成员函数。这个扩展构造函数是厂商的私有实现,不保证其他编译器(比如MSVC、Clang的libc)也提供相同接口,跨平台代码切勿依赖它。

内容的提问来源于stack exchange,提问作者MarkB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 07:52:02