这个C ++function的名字是什么?
我正在写一些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);
来自其他语言,这看起来可能是某种匿名types。 这个function的名称是什么,如果它真的是一个function?
它的目的是什么?
当你不知道从哪里开始时,很难find它。
逗号运算符†评估左侧,放弃其值,结果产生右侧。 WSA_FLAG_OVERLAPPED
是1,这是expression式的结果; 所有其他的值都被丢弃。 从来没有创build套接字。
†除非超载。 是的,它可以超载。 不,你不应该超载。 离开键盘,现在!
编译器在括号内依次评估每个序列点 ,结果是expression式中的最终expression式WSA_FLAG_OVERLAPPED
。
逗号运算符是C ++中的一个序列点。 在右边的expression式之前,对逗号左边的expression式进行全面评估。 结果永远是正确的价值。 当你得到expression式(x1,x2,x3,…,xn)时,expression式的结果总是xn
。
逗号运算符正在理解您的代码。
您正在有效地设置this->listener = WSA_FLAG_OVERLAPPED;
这恰好是合法有效的。