Как называется эта функциональность С++?
Я писал код на С++ и ошибочно пропустил имя функции 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;
, который просто синтаксически корректен.