我编写了一些C++代码,错误地省略了函数WSASocket的名称。但是,我的编译器没有引发错误,并将我的SOCKET与整数值1相关联,而不是一个有效的套接字。
有关代码应该如下所示:
this->listener = WSASocket(address->ai_family, address->ai_socktype, address->ai_protocol, NULL, NULL, WSA_FLAG_OVERLAPPED);相反,它看起来是这样的:
this->listener = (address->ai_family, address->ai_socktype, address->ai_protocol, NULL, NULL, WSA_FLAG_OVERLAPPED);来自其他语言,这看起来可能是某种匿名类型。这个特性的名称是什么,如果它真的是一个特性的话?
它的目的是什么?
当你不知道从哪里开始的时候,寻找它是很困难的。
发布于 2014-11-18 10:15:50
逗号运算符†计算左手边,丢弃它的值,从而产生右手边。WSA_FLAG_OVERLAPPED为1,这是表达式的结果;所有其他值都被丢弃。从来没有创建过套接字。
†,除非超载。是的,它可以超载。不,你不应该让它超载。离键盘远点,马上!
发布于 2014-11-18 10:15:43
逗号运算符正在理解您的代码。
您正在有效地设置this->listener = WSA_FLAG_OVERLAPPED;,它恰好是同步有效的。
发布于 2014-11-18 10:15:38
编译器依次在括号内计算每个sequence point,结果是表达式中的WSA_FLAG_OVERLAPPED。
逗号运算符,是C++中的序列点。对逗号左边的表达式进行完全计算,然后对右侧表达式进行计算。结果总是右边的值。当得到表单的表达式(x1、x2、x3、.、xn)时,表达式的结果总是xn。
https://stackoverflow.com/questions/26991685
复制相似问题