# std::system_error::system_error

< cpp‎ | error‎ | system error

system_error( std::error_code ec ); | (1) | (C++11 起)
system_error( std::error_code ec, const std::string& what_arg ); | (2) | (C++11 起)
system_error( std::error_code ec, const char* what_arg ); | (2) | (C++11 起)
system_error( int ev, const std::error_category& ecat ); | (3) | (C++11 起)
system_error( int ev, const std::error_category& ecat, const std::string& what_arg ); | (4) | (C++11 起)
system_error( int ev, const std::error_category& ecat, const char* what_arg ); | (4) | (C++11 起)
system_error( const system_error& other ) noexcept; | (5) | (C++11 起)

构造新的 system_error 对象。

1) 以 error_code `ec` 构造
2) 以 error_code `ec` 和解释字符串 `what_arg` 构造。 what() 返回的字符串保证含有 `what_arg` 。
3) 以底层错误码 `ev` 和关联的 error_category `ecat` 构造。
4) 以底层错误码 `ev` 、关联的 error_category `ecat` 和解释字符串 `what_arg` 构造。 what() 返回的字符串保证含有 `what_arg` （假定它不含内嵌的空字符 ）。
5) 复制构造函数。以 `other` 的内容初始化内容。若 `*this` 与 `other` 均拥有动态类型 `std::system_error` 则 std::strcmp(what(), other.what()) == 0 。

### 参数

ec | - | 错误码
ev | - | 基础编码的错误码
ecat | - | 错误类别
what_arg | - | 解释性字符串

### 示例

演示如何从 errno 值创建 system_error 异常

    #include <iostream>
    #include <system_error>

    int main()
    {
        try
        {
            throw std::system_error(EDOM, std::generic_category());
        }
        catch (const std::system_error& error)
        {
            std::cout << "Error: " << error.code()
                      << " - " << error.code().message() << '\n';
        }
    }

可能的输出：

    Error: generic:33 - Numerical argument out of domain