std::bind c++ in if statement



我正在为一个学校项目使用一些遗留代码,并试图捕获std::bind是否失败。 这是项目中当前的代码(不是我编写的(,在VS 2019中产生"C++没有运算符匹配这些操作数"错误。 我尝试与布尔值进行比较,这就是它所说的 std::bind 返回无济于事。

if ( bind( socket, (const sockaddr*) &address, sizeof(sockaddr_in) ) < 0 )
{
printf( "failed to bind socketn" );
Close();
return false;
}

如果 std::bind 在 if 语句中失败,我还能如何正确捕获?

C++std::bind()

函数在失败时不返回值,而是引发异常。

但是您显示的代码根本不尝试使用std::bind(),它实际上是尝试使用 WinSockbind()函数,但它不能,因为std::bind()由于之前的using namespace std;using std::bind;语句(很可能是前者(而在范围内,因此编译器试图调用std::bind()

您需要删除using语句,或者使用::全局范围解析运算符作为bind()调用的前缀:

if ( ::bind( socket, (const sockaddr*) &address, sizeof(sockaddr_in) ) < 0 )

最新更新