Операторы С++
Оператор – конструкция языка позволяющая производить различные действия над данными, приводящие к определенному результату.
Унарные
- Унарные – операторы, которым необходим, только один операнд (данные, над которыми производится действие). С примером унарного оператора вы уже знакомы из курса школьной математики – унарный минус, который позволяет превратить число в отрицательное (3 и -3), или положительное ( –(-3)). Т. е. общий синтаксис унарного оператора таков:
оператор операнд; или операнд оператор;
Инкремент и декремент.
- Инкремент – обозначается конструкцией ++. Данный оператор увеличивает содержимое любой переменной на единицу и перезаписывает значение переменной. Например,
int a=8; cout<<a; // на экране число 8 a++; cout<<a; // на экране число 9
- Декремент – обозначается конструкцией –. Данный оператор уменьшает содержимое любой переменной на единицу и перезаписывает значение переменной. Например,
int a=8; cout<<a; // на экране число 8 a--; cout<<a; // на экране число 7
Такие выражения могут быть представлены и так: a=a+1 или a=a-1. синтаксис унарного оператора, может быть не только таким
операнд оператор;
, но и таким
оператор операнд;
Такие формы записи носят название постфиксной, (оператор располагается после значения) и префиксной (оператор располагается до значения). И инкремент, и декремент обладают обеими формами. Давайте разберемся, какие есть различия между формами, и в каких случаях эти различия имеют значение.
Пример 1. int a=8; cout<<a; // на экране число 8 a++; cout<<a; // на экране число 9 ++a; cout<<a; // на экране число 10
В данном примере нет никакой разницы, между префиксной и постфиксной формой. И в первом и во втором случае значение переменной а просто увеличивается на единицу. Смысл использования различных форм оператора появляется только тогда, когда в строке кроме самого оператора, есть еще какая-нибудь команда.
Пример 2. int a=8; cout<<++a; // на экране число 9 cout<<a++; // на экране число 9 cout<<a; // на экране число 10
Прежде чем разбирать пример, давайте установим три правила:
- Все команды в языке С выполняются справа налево.
- Если кроме постфиксной формы инкремента или декремента, в строке есть еще какая-либо команда, то сначала выполняется эта команда, и только потом инкремент или декремент независимо от расположения команд в строке.
- Если кроме префиксной формы инкремента или декремента, в строке есть еще какая-либо команда, то все команды в строке выполняются справа налево согласно приоритету операторов.
Теперь более подробно о примере:
- Изначально значение переменной равно числу 8.
- Команда cout«++a; содержит префиксную форму оператора инкремент, следовательно, используя третье правило, описанное выше, мы сначала увеличиваем значение переменной а на единицу, а затем показываем его на экран с помощью команды cout«.
- Команда cout«a++; содержит постфиксную форму оператора инкремент, следовательно, используя второе правило, описанное выше, мы сначала показываем значение переменной (всё еще 9) на экран с помощью команды cout«, а затем увеличиваем значение переменной a на единицу.
- При выполнении следующей команды cout«a; будет показано уже измененное (увеличенное) значение, то есть число 10.
Бинарные
- Бинарные – операторы, которым необходимо два операнда слева и справа от оператора, например: +, -,*, Деление по модулю (вычисление остатка от деления) и т. д. И их общий синтаксис можно изобразить следующим образом:
операнд оператор операнд;
Тернарные
- Тернарные - операторы, которым необходимо три операнда.
условие ? выражение1 : выражение2
Алгоритм работы операции следующий: Вычисляется условие (логическое выражение).Если логическое выражение истинно, то вычисляется значение выражения выражение 1, в противном случае — значение выражения выражение 2. Вычисленное значение возвращается. Нужно обратить внимание, что вычисляется только одно из выражений: выражение 1 или выражение 2. Второй и третий операнды, то есть <выражение1> и <выражение2>, должны возвращать значения одного типа и не должны иметь тип void.
- Си
В Си тернарная операция имеет следующий синтаксис:[2]
o1 ? o2 : o3
Как известно, в Си нет логического типа данных. Поэтому операнд o1 должен быть числом (целым или вещественным) или указателем. Сначала вычисляется именно его значение. Оно сравнивается с нулём и, если оно не равно нулю, вычисляется и возващается o2, в случае равенства — o3. Операнды o2 и o3 могут быть различных, вообще говоря, несовпадающих типов, включая void. В следующем примере вычисляется минимальное из чисел a и b:
min = (a < b) ? a : b;
- C++
В C++ тернарная условная операция имеет тот же синтаксис, что и в Си.[3] Однако за счёт наличия разницы между инициализацией и присваиванием, бывают ситуации, когда операцию ?: нельзя заменить конструкцией if-then-else, как, например, в следующем случае:
#include <iostream> #include <fstream> #include <string> using namespace std; int main(int argc, char** argv) { string name; ofstream fout; if (argc > 1 && argv[1]) { name = argv[1]; fout.open(name.c_str(), ios::out | ios::app); } ostream& sout = name.empty() ? cout : fout; return 0; }
Здесь переменная sout инициализируется в момент объявления результатом работы тернарной операции. Подобного эффекта не удалось бы достичь простым присваиванием в том или ином случае.
📌 Для тестирования скриптов, установщиков VPN, Python ботов рекомендуем использовать надежные VPS на короткий срок. Если вам нужна помощь с более сложными задачами, вы можете найти фрилансера, который поможет с настройкой. Узнайте больше о быстрой аренде VPS для экспериментов и о фриланс-бирже для настройки VPS, WordPress. 📌
💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!
7 Самых Популярных Статей
- Как запустить скрипты и веб-приложения на Python
- Что такое страны TIER 1,2,3
- 7 способов сравнения файлов по содержимому в Windows или Linux
- Установка и тестирование веб-панели HestiaCP
- Китайский VPN Shadowsocks простая установка и настройка
- top, htop, atop определение загрузки ОС (Load average, LA)
- Использование rsync в примерах