c++ - error_code 与 errno

标签 c++ c++11 error-handling errno

我正在研究 C++11 标准。我想了解 error_code 和 errno 是否相互关联?如果是那么如何? 如果否,那么我应该在哪些条件下设置 errno 以及在哪些条件下设置 error_code?

我做了一个小测试程序来理解这一点,但仍然有点困惑。请帮忙。

#include <iostream>
#include <system_error>
#include <thread>
#include <cstring>
#include <cerrno>
#include <cstdio>

using namespace std;

int main()
{
    try
    {
        thread().detach();
    } catch (const system_error & e) {
        cout<<"Error code value - "<<e.code().value()<<" ; Meaning - "<<e.what()<<endl;
        cout<<"Error no. - "<<errno<<" ; Meaning - "<<strerror(errno)<<endl;
    }
}

Output -
Error code value - 22 ; Meaning - Invalid argument
Error no. - 0 ; Meaning - Success

最佳答案

errno 由那些将其记录为遇到错误的副作用的函数使用 - 这些函数是 C 库或从不抛出异常的操作系统函数。 system_error 由 C++ 标准库使用,用于在您使用已记录的库设施抛出该异常时使用。完全分开。最后,请阅读您的文档!

关于c++ - error_code 与 errno,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15826933/

相关文章:

c++ - 全局变量,它们到底是什么?

ios - RacSignal 自动处置

javascript - 使用 NodeJS 的 "net"模块处理 tcp 连接上的错误

c++ - isSet() 或 operator void*() 或 explicit operator bool() 或其他?

c++ - 重建仅知道其名称和参数列表的函数的签名

c++ - 如何确保所有从属线程都等待条件变量?

error-handling - 当error_reporting = off时,AJAX调用的文件显示错误

c++ - 在 vector 的 vector 上使用算法

c++ - 无法使用 boost::read_graphml 读取 graphML

c++ - 加速 OpticalFlow 算法 - OpenCV