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

error_category是否为静态地址?抛出system_error时其对象是否被引用?

关于error_category与system_error的两个问题解答

问题1:error_category是否拥有静态地址?

是的,标准库提供的error_category派生类实例(比如system_category()、generic_category()返回的对象)都是单例静态对象,它们的地址在程序整个生命周期内固定不变。这是C++标准的明确要求,目的是保证这些全局错误类别对象的唯一性,避免同一错误类别出现多个实例。

问题2:抛出system_error时,error_category对象是被拷贝还是以引用形式传递,以确保代码中两次输出地址一致?

当调用system_error(0, system_category(), "")构造异常对象时,system_category()返回的是const system_error_category&类型的引用,system_error内部并不会拷贝error_category对象,而是通过指针或引用的方式持有该对象。

因此在catch块中,se.code().category()返回的依然是原system_category()对象的引用,两次输出的地址自然完全一致。

验证代码及输出

#include <iostream>

using namespace std;

int main()
{
    try
    {
        cout << &system_category() << endl;
        throw system_error( 0, system_category(), "" );
    }
    catch( system_error &se )
    {
        cout << &se.code().category() << endl;
    };
}

输出示例:

00007FF609AC5010
00007FF609AC5010

内容的提问来源于stack exchange,提问作者Edison von Myosotis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 03:27:08