这个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; 这恰好是合法有效的。