[英]What is the name of this C++ functionality?
我正在编写一些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);
来自其他语言,这看起来可能是某种匿名类型。 该功能的名称是什么,如果它真的是一个功能?
它的目的是什么?
当你不知道从哪里开始时,很难搜索它。
逗号运算符†评估左侧,丢弃其值,结果产生右侧。 WSA_FLAG_OVERLAPPED
为1,这是表达式的结果; 所有其他值都被丢弃。 没有创建套接字。
†除非超载。 是的,它可以超载。 不,你不应该超载它。 现在就远离键盘!
逗号运算符正在理解您的代码。
你有效地设置this->listener = WSA_FLAG_OVERLAPPED;
这恰好是合成有效的。
编译器在括号内依次评估每个序列点 ,结果是表达式中的最终表达式WSA_FLAG_OVERLAPPED
。
逗号运算符,
是在C ++中的序列点。 在右边的表达式之前,将完全评估逗号左侧的表达式。 结果始终是右边的值。 当你有一个表达式(x1,x2,x3,...,xn)时,表达式的结果总是为xn
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.