Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
-1 / 25 / 4
Регистрация: 27.11.2017
Сообщений: 375

Еще раз о бинарных и унарных операциях

08.05.2019, 15:38. Показов 3900. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ну да все мы знаем, что в C++ есть бинарные, унарные и даже тернарные операции.
Но вот почему то все учебники стыдливо обходят стороной такой вопрос, а вот скобки такие () и такие [] - это какая операция - унарная или бинарная? В списки приоритетов и ассоциативности они присутствуют, а вот насчет их унарности или бинарности - одна тишина.

Может знающие люди прояснят ситуацию.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.05.2019, 15:38
Ответы с готовыми решениями:

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

Перегрузка операторов (бинарных и унарных)
Как сделать на основе этого кода не менее 2 унарных и 2 бинарных операторы. #include <iostream> #include <stdlib.h> ...

Перегрузка унарных и бинарных операторов
У меня есть задача, только я немного не понимаю сути, что конкретно нужно сделать... В основном это касается последних формулировок в ней. ...

26
106 / 93 / 44
Регистрация: 26.07.2015
Сообщений: 197
08.05.2019, 15:47
() и [] унарные, но всегда определяется как члены класса
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
08.05.2019, 15:48
я не знающий, но думаю это унарные пост префиксные.
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
08.05.2019, 16:07
Цитата Сообщение от Si14 Посмотреть сообщение
() и [] унарные, но всегда определяется как члены класса
Унарный оператор это тот который работает с одним операндом.
Оператор () же может иметь multiple subscription.
Да и вообще они ни унарные, ни бинарные.

Унарные операторы, это только эти:
Code
1
*  &  +  -  !  ~
0
-1 / 25 / 4
Регистрация: 27.11.2017
Сообщений: 375
08.05.2019, 16:45  [ТС]
Ну хорошо, вот вы все высказались, что мол они унарные, тогда опять встает вопрос, где операция, а где операнд, ведь любая операция она должна стоять вроде бы либо слева, либо справа от своего операнда. Ну а что вы можете пояснить по этому случаю?
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
08.05.2019, 17:04
Цитата Сообщение от Просто Саша Посмотреть сообщение
Ну а что вы можете пояснить по этому случаю?
Ничего, потому что они не унарные, я же вам сказал.
Вот так выглядит унарный оператор
C++
1
2
3
(a).operator+();
// т.е. это тоже самое что и выражение
+a;
операторы же () и [] выглядят так
C++
1
2
3
4
5
(a).operator[](index);
(a).operator()(...);
// т.е. это тоже самое что и выражения
a[index];
a(1, 2, 3);
0
-1 / 25 / 4
Регистрация: 27.11.2017
Сообщений: 375
08.05.2019, 19:06  [ТС]
Короче я так понял, что ответа не дождусь.
Ну это вы по правилам перегрузки судите, тем не менее и там есть имключения, например с перегрузкой ->, но главное так и не понятно бинарные они или унарные.

Между прочим, чего вас пытать то? Почему в учебниках об этом ничего не пишется?
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
08.05.2019, 20:24
---
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
08.05.2019, 20:46
Просто Саша, унарные оперируют данными только одного объекта, дальше по этой логике...
0
611 / 416 / 151
Регистрация: 11.01.2019
Сообщений: 1,746
08.05.2019, 21:12
Цитата Сообщение от Просто Саша Посмотреть сообщение
а вот скобки такие () и такие [] - это какая операция - унарная или бинарная?
Операция [] - бинарная. Первый операнд у нее - указатель на массив, второй - индекс.
Операция () формально тоже бинарная. Первый операнд у нее - указатель на функцию, второй - список аргументов.
Но тут, как говорится - хоть горшком назови, только в печь не ставь!
0
-1 / 25 / 4
Регистрация: 27.11.2017
Сообщений: 375
08.05.2019, 21:25  [ТС]
Ну вот теперь пошли другие мнения, что мол они не унарные, а бинарные.
Короче, господа, где это выяснить то можно, может к самому Страурстпу обратиться?
Тока не факт, что он сам знает и сможет дать правильный ответ.
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
08.05.2019, 21:36
Цитата Сообщение от Просто Саша Посмотреть сообщение
может к самому Страурстпу обратиться?
можешь к стандарту обратиться
http://eel.is/c++draft/#expr
http://eel.is/c++draft/#over
как я понял нет четкого разделения на унарные и бинарные операторы, в каком смысле ты их понимаешь
0
-1 / 25 / 4
Регистрация: 27.11.2017
Сообщений: 375
08.05.2019, 22:07  [ТС]
Цитата Сообщение от _stanislav Посмотреть сообщение
можешь к стандарту обратиться
JОбратимся, еще не дочитал, но ваши ссылки никуда не ведут.
Влпрос в другм, может скобки вообще вывести из аблицы приоритетов и ассоциативности.
Ну нечего им там делать.
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
08.05.2019, 22:24
Цитата Сообщение от Просто Саша Посмотреть сообщение
В списки приоритетов и ассоциативности они присутствуют, а вот насчет их унарности или бинарности - одна тишина.
твоя логика такова, если они есть в таблице приоритетов и ассоциативности значит обязательно должны относится либо к унарному или бинарному типу? мне кажется это не правильное мышление.
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
08.05.2019, 22:46
Цитата Сообщение от Просто Саша Посмотреть сообщение
Ну да все мы знаем, что в C++ есть бинарные, унарные и даже тернарные операции.
Но вот почему то все учебники стыдливо обходят стороной такой вопрос, а вот скобки такие () и такие [] - это какая операция - унарная или бинарная? В списки приоритетов и ассоциативности они присутствуют, а вот насчет их унарности или бинарности - одна тишина.
Они не унарные и не бинарные.
Вообще эта классификация нужна лишь с одной целью: отличать операторы, которые могут использоваться в бинарном и унарном контекстах. Т.е. называя оператор + бинарным, стандарт обозначает, что данный оператор применяется для двух операндов, чтобы при описании отличать его от унарной формы оператора +. Т.е. это просто обозначение особенностей грамматики в тех или иных случаях, а не какая-то основополагающая классификация.

А unary-operator из стандарта - это не классификация операторов, а обозначение части грамматики. И именно поэтому нет binary-operator, так как, собственно, его "binary" образуется соответствующим выражением (например, для * или /). Для [] и других - выражение формируется так.

Вывод из этого только один. Бессмысленно составлять какие-либо таблицы, отличные от тех, что приведены в стандарте. В учебниках начального уровня такие таблицы приводят для простоты усваивания информации, но, при переходе на ступеньку выше в своих знаниях, от них нужно отказаться, в пользу прямого применения грамматики С++.

Цитата Сообщение от Просто Саша Посмотреть сообщение
Короче, господа, где это выяснить то можно, может к самому Страурстпу обратиться?
Давайте обратимся:
Цитата Сообщение от The C++ Programming Language (3rd edition)
11.2.1 Binary and Unary Operators [over.binary]

A binary operator can be defined by either a nonstatic member function taking one argument or a
nonmember function taking two arguments. For any binary operator @, aa@bb can be interpreted as
either aa.operator@(bb) or operator@(aa,bb)
. If both are defined, overload resolution (§7.4)
determines which, if any, interpretation is used.

....

A unary operator, whether prefix or postfix, can be defined by either a nonstatic member function
taking no arguments or a nonmember function taking one argument. For any prefix unary operator
@, @aa can be interpreted as either aa.operator@() or operator@(aa)
. If both are defined, overload
resolution (§7.4) determines which, if any, interpretation is used. For any postfix unary operator @, aa@ can be
interpreted as either aa.operator@(int) or operator@(aa,int).
This is explained further in §11.11.
If both are defined, overload resolution (§7.4) determines which, if any, interpretation is used.
An operator can be declared only for the syntax defined for it in the grammar (§A.5). For example, a
user cannot define a unary % or a ternary +.
Ключевое выделил крупно. Это именно то, что вам нужно сделать, открыть книгу, параграф A.5.
1
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
08.05.2019, 22:56
DrOffset, тем не менее, арность - вполне себе четкая характеристика. Будь то операция, оператор, да и даже выражение (часть выражения).
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
08.05.2019, 23:10
Цитата Сообщение от avgoor Посмотреть сообщение
тем не менее, арность - вполне себе четкая характеристика.
Четкая, но в С++ она определяется из грамматики, а не наоборот, как представляется ТС. B для тех случаев, где это не важно - например для ->, эта характеристика просто не вводится. Собственно это все, что я хотел сказать постом выше.
0
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
09.05.2019, 00:52
Цитата Сообщение от DrOffset Посмотреть сообщение
она определяется из грамматики, а не наоборот, как представляется ТС
Вот именно. Мое замечание было о том, что арность чего-то - это базовое понятие, которое должно быть понятно (хм... простите за тавтологию) тому, кто читает стандарт. А то, тут уже начали говорить, что есть какие-то "бинарный" и "унарный" типы.
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
09.05.2019, 01:59
Цитата Сообщение от avgoor Посмотреть сообщение
А то, тут уже начали говорить, что есть какие-то "бинарный" и "унарный" типы.
Я ничего такого не говорил.

Цитата Сообщение от avgoor Посмотреть сообщение
Мое замечание было о том, что арность чего-то - это базовое понятие, которое должно быть понятно (хм... простите за тавтологию) тому, кто читает стандарт.
Может я не совсем понятно выразился, или вам просто охота со мной поговорить
Арность - да, это базовое понятие вообще, но в стандарте оно определяется грамматикой. Т.е. в стандарте - оно не базовое, а производное из грамматики - смотрите, Страуструп тоже об этом пишет. ТС же хочет поделить все операторы на бинарные, унарные, н-арные, именно так, как будто бы это самое базовое, что есть. Я же говорю, что арность - это свойство некоторых операторов, для которых грамматика описывает ее, для остальных это понятие не применяется. Именно поэтому в стандарте нет никаких таблиц арности или чего-то такого.

ТС говорил об исключениях для некоторых операторов. Но исключения бывают только из общих правил. Здесь же все наоборот, общее правило - это грамматика, а арность - частный случай. В этом ключе никаких исключений нет. Есть несколько частных случаев, с арностью и без.
0
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
09.05.2019, 02:09
Цитата Сообщение от DrOffset Посмотреть сообщение
или вам просто охота со мной поговорить
Всегда приятно поговорить с умным человеком.
Цитата Сообщение от DrOffset Посмотреть сообщение
Я ничего такого не говорил.
Я не про вас. Я про:
Цитата Сообщение от _stanislav Посмотреть сообщение
обязательно должны относится либо к унарному или бинарному типу
Цитата Сообщение от DrOffset Посмотреть сообщение
но в стандарте оно определяется грамматикой.
Блин. Оно не в стандарте определяеццо. В стандарте есть на него ссылка. В расчете на то, что тот, кто читает про операции (операторы, выражения etc.) уже знает, что такое арность операции.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.05.2019, 02:09
Помогаю со студенческими работами здесь

Перегрузка унарных и бинарных операторов в шаблоне
Доброго времени суток! Недавно столкнулся с проблемой при написании такого шаблона: template <typename T> class CPoint; ...

В чём отличие унарных и бинарных операторов?
Подскажите пожалуйста, это унарный или бинарный оператор (а-b для комплексных чисел). Я знаю, что бинарный оператор, это когда два...

Ввести строку символов. Если символ в данной строке встречается один раз, в конце строки добавлять ещё раз его
Ввести строку символов. Если символ в данной строке встречается один раз, в конце строки добавлять ещё раз этот символ. Pезультат вывести...

Если символ в данной строке встречается один раз, в конце строки добавлять ещё раз этот символ
Помогите с задачей на C# Ввести строку символов. Если символ в данной строке встречается один раз, в конце строки добавлять ещё раз этот...

Почему так(комбинации бинарных и не бинарных вводов и выводов)?
#include <string> #include <iostream> #include <fstream> #include <iomanip> using namespace std; int main() { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru