Класс error_code
Класс error_code представляет собой
легковесный контейнер для хранения значения
кода ошибки и указателя на категорию ошибок.
Он используется для передачи кодов ошибок
без генерации исключений. Объект содержит
два основных поля: числовое значение кода
и категорию, которая определяет смысл этого
кода. Значение 0 обычно означает
отсутствие ошибки. Для получения текстового
описания ошибки используется метод
message, а для извлечения числового
значения - метод value. Класс
поддерживает сравнение с другими объектами
error_code и с числовыми значениями.
Синтаксис
error_code ec;
error_code ec(value, category);
Пример
Давайте создадим объект error_code
с нулевым значением и проверим, содержит
ли он ошибку:
#include <iostream>
#include <system_error>
using namespace std;
int main()
{
error_code ec;
cout << "value: " << ec.value() << endl;
cout << "message: " << ec.message() << endl;
cout << "has error: " << (ec ? "true" : "false") << endl;
return 0;
}
Результат выполнения кода:
"value: 0"
"message: "Success""
"has error: false"
Пример
Давайте создадим объект error_code
с ненулевым значением из категории
generic_category и выведем информацию
о нем:
#include <iostream>
#include <system_error>
using namespace std;
int main()
{
error_code ec(2, generic_category());
cout << "value: " << ec.value() << endl;
cout << "message: " << ec.message() << endl;
cout << "has error: " << (ec ? "true" : "false") << endl;
return 0;
}
Результат выполнения кода:
"value: 2"
"message: "No such file or directory""
"has error: true"
Пример
Давайте сравним два объекта error_code
между собой и с числовым значением:
#include <iostream>
#include <system_error>
using namespace std;
int main()
{
error_code ec1(2, generic_category());
error_code ec2(2, generic_category());
error_code ec3;
cout << "ec1 == ec2: " << (ec1 == ec2 ? "true" : "false") << endl;
cout << "ec1 == ec3: " << (ec1 == ec3 ? "true" : "false") << endl;
cout << "ec1 == 2: " << (ec1 == 2 ? "true" : "false") << endl;
cout << "ec3 == 0: " << (ec3 == 0 ? "true" : "false") << endl;
return 0;
}
Результат выполнения кода:
"ec1 == ec2: true"
"ec1 == ec3: false"
"ec1 == 2: true"
"ec3 == 0: true"
Смотрите также
-
класс
system_error,
который переносит код ошибки вместе с исключением -
метод
message,
который возвращает текстовое описание ошибки -
метод
value,
который возвращает числовое значение кода ошибки -
функция
make_error_code,
которая создает объект error_code из перечисления