Как называется эта функциональность С++?

Я писал код на С++ и ошибочно пропустил имя функции 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);

Исходя из других языков, похоже, что это может быть какой-то анонимный тип. Каково название этой функции, в случае, если это действительно функция?

В чем его цель?

Сложно найти его, когда вы не знаете, с чего начать.

Ответ 1

Оператор запятой и кинжал; оценивает левую сторону, отбрасывает ее значение и, как результат, дает правую сторону. WSA_FLAG_OVERLAPPED равно 1, и это результат выражения; все остальные значения отбрасываются. Сокет никогда не создается.


& крестик; Если не перегружен. Да, это может быть перегружено. Нет, вы не должны перегружать его. Шаг от клавиатуры, прямо сейчас!

Ответ 2

Компилятор оценивает каждую точку последовательности по очереди в круглой скобке, а результатом является окончательное выражение WSA_FLAG_OVERLAPPED в выражении.

Оператор запятой , является точкой последовательности в С++. Выражение слева от запятой полностью оценивается перед выражением справа. Результатом всегда является значение справа. Когда вы получили выражение формы (x1, x2, x3,..., xn), результат выражения всегда xn.

Ответ 3

Оператор запятой понимает ваш код.

Фактически вы устанавливаете this->listener = WSA_FLAG_OVERLAPPED;, который просто синтаксически корректен.