繁体   English   中英

这个C ++功能的名称是什么?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM