C++ 由相同值和相同类别构造的std::error_代码和std::error_条件是否始终等效?

C++ 由相同值和相同类别构造的std::error_代码和std::error_条件是否始终等效?,c++,c++11,C++,C++11,我知道error_代码依赖于系统,error_条件独立于系统,但这是否意味着如果我们在构造它们时指定值和类别,它们将不同。例如: std::error_code ecode(1,std::system_category()) std::error_条件(1,std::system_category()) if(ecode==second)//无论我们在哪个平台,这个条件都是真的吗??? 以上在macOS的XCode中是正确的,所以我想知道如果我们在其他平台上,例如Windows,是否总是这样 如

我知道error_代码依赖于系统,error_条件独立于系统,但这是否意味着如果我们在构造它们时指定值和类别,它们将不同。例如:

std::error_code ecode(1,std::system_category())

std::error_条件(1,std::system_category())

if(ecode==second)//无论我们在哪个平台,这个条件都是真的吗???

以上在macOS的XCode中是正确的,所以我想知道如果我们在其他平台上,例如Windows,是否总是这样


如果是这样,为什么会出现这种情况,因为
ecode
是系统相关的,而
econd
是系统独立的?

它们不是。错误代码和条件的相等性由类别成员函数“等效”确定,您可以编写一个类别,使任何代码和条件都不相等。例如:

#包括
#包括
结构类别:标准::错误类别
{
const char*name()const noexcept{return“name”;}
字符串消息(int)常量{返回“消息”;}
bool等价物(int,const std::error_condition&)const noexcept{return false;}
bool等价物(const std::error_code&,int)const noexcept{return false;}
}猫;
int main(){
std::错误代码ecode(1,cat);
std::错误(1,cat);

std::cout我对这个行为还不太熟悉,无法回答,但这可能是一个起点。我不认为std::system_category
有任何保证,但我们知道
std::errc
枚举使用与
std::generic_category
中的错误条件和错误值相同的值