В этой статье блога описываются операторы языка C++. Мы используем обозначения, которые считаем мнемоническими, например: m — для имени члена; T — для имени типа; p — для выражения, создающего указатель; x — для выражения; v — для выражения lvalue; lst — для списка аргументов.
Также вам может показаться, что такая тема как
http://www.complat.ru/rus/services/line
никак не связана и даже не тематична с программированием. Хотя, может быть и связана.
В любом случае все-таки зайдите на сайт complat.ru
Тема провести интернет там представлена весьма широко.
Типы результатов арифметических операций определяются обычными арифметическими преобразованиями. Описания, приведенные тут, касаются только встроенных операторов, а не операторов, которые программист может определить самостоятельно, хотя, определяя свои собственные операторы, следует придерживаться семантических правил, установленных для встроенных операторов.
Разрешение области видимости
N :: m m находится в пространстве имен N; N — имя пространства имен или класса
:: m m находится в глобальном пространстве имен
Обратите внимание на то, что члены могут быть сами вложенными, поэтому можем получить такие выражения, как N::C::m).
Постфиксные выражения
x.m
p->m
p[x]
f(lst)
T(lst)
v++
typeid(x)
Доступ к члену класса; x должен быть объектом класса Доступ к члену класса; p должен быть указателем на объект класса; эквивалентно (*p).m Индексирование; эквивалентно *(p+x)
Вызов функции; вызов функции f со списком аргументов lst Создание: создание объекта T со списком аргументов lst (Постфиксная) инкрементация; значение v++ равно значению v до инкрементации
(Постфиксная) декрементация; значение v— равно значению v до инкрементации
Идентификация типа объекта x во время выполнения программы
Идентификация типа T во время выполнения программы Приведение объекта x к типу T с проверкой во время выполнения программы
Приведение объекта x к типу T с проверкой во время компиляции программы
Непроверяемое преобразование, которое сводится к добавлению или удалению спецификатора const у типа объекта x, чтобы получить тип T
reinterpret_cast(x) Непроверяемое приведение объекта x к типу T с помощью
иной интерпретации битовой комбинации объекта x
Оператор typeid и его применения не описаны в этой книге; его детали можно найти в более сложных учебниках. Обратите внимание на то, что операторы приведения не модифицируют свой аргумент. Вместо этого они создают результат своего типа, который каким-то образом соответствует значению аргумента
Унарные выражения
typeid(T)
dynamic_cast(x) static_cast(x) const cast(x)
sizeof(T)
sizeof(x)
Размер типа T в байтах
Размер типа, к которому относится объект x (в байтах)
Окончание таблицы
Унарные выражения
++v (Префиксная) инкрементация; эквивалентно v+=1
—v (Префиксная) декрементация; эквивалентно v-=1
~x Дополнение к x; побитовая операция
!x Отрицание x; возвращает true или false
&v Адрес переменной v
*P Содержание объекта, на который ссылается указатель p
new T Создает объект типа T в свободной памяти
new T(lst) Создает объект типа T в свободной памяти и инициализирует его
объектом lst
new(lst) T Создает объект типа T в области памяти, заданной аргументом lst
new(lst) T(lst2) delete p Создает объект типа T в области памяти, заданной аргументом lst,
и инициализирует его аргументом lst2
Удаляет объект, на который ссылается указатель p
delete[] p Удаляет массив объектов, на который ссылается указатель p
(T)x Приведение в стиле языка C; приведение объекта x к типу T
Объекты, на которые ссылается указатель p в инструкциях delete p и delete[] p, должны быть размещены в памяти с помощью оператора new. Следует подчеркнуть, что выражение (T)x является менее конкретным и, следовательно, более уязвимым для ошибок, чем более конкретные операторы приведения.
Выбор члена класса
x.*ptm Член объекта x, определенный указателем на член класса ptm
p->*ptm Член *p, идентифицированный указателем на член класса ptm
Эти инструкции в книге не рассматриваются; обратитесь к более сложным учебникам.
Мультипликативные операторы
x*y Умножение x на y
x/y Деление x на y
x%y Деление по модулю (остаток от деления) x на y (не для типов с плавающей точкой)
Если y==0, то результат выражений x/y и x%y не определен. Если переменная x или y является отрицательной, то результат выражения x%y является отрицательным.
Аддитивные операторы
x+y Сложение x и y
x-y Вычитание y из x
Операторы сдвига
x<
x>>y Сдвигает биты x вправо на y позиций
Для встроенных типов операторы >> и << означают сдвиг битов. Если левым операндом является объект класса iostream, то эти операторы используются для ввода и вывода.
x
x<=y x меньше или равно y
x>y x больше y
x>=y x больше или равно y
Результатом оператора сравнения является значение типа bool.
Операторы равенства
x==y x равно y; возвращает значение типа bool
x!=y x не равно y
Обратите внимание на то, что x!=y эквивалентно !(x==y). Результат оператора равенства имеет тип bool.
Побитовое “и”
x&y побитовое “и” чисел x и y
Оператор & (как и операторы л, |, ~, >> и <<) возвращает комбинацию битов. Например, если переменные a и b имеют тип unsigned char, то результат выражения a&b имеет тип unsigned char, в котором каждый бит является результатом применения оператора & к соответствующим битам переменных a и b.
Побитовое исключительное “или” (хог)
x^y Побитовое исключительное “или” переменных x и y
Побитовое “или”
x|y Побитовое “или” переменных x и y
Логическое “и”
x&&y Логическое “и”; возвращает значения true и false; вычисляет значение
y, только если x имеет значение true
A.5. ВЫРАЖЕНИЯ
1097
Логическое “или”
x||y Логическое “или”; возвращает значения true и false; вычисляет значение
у, только если x имеет значение false
Условное выражение
x?y:z Если x равно true, то результат равен у; иначе — равен z
Рассмотрим пример. template T& max(T& a, T& b) { return (a>b)?a:b; }
Присваивание
v=x Присваивает x переменной v; результат равен v
v*=x Аналог v=v*(x)
v/=x Аналог v=v/(x)
v%=x Аналог v=v%(x)
v+=x Аналог v=v+(x)
v-=x Аналог v=v-(x)
v>>=x Аналог v=v>>(x)
v<<=x Аналог v=v<<(x)
v&=x Аналог v=v&(x)
A
v =x Аналог v=v^(x)
v|=x Аналог v=v|(x)
Фраза “аналог v=v*(x) ” означает, что значение выражения v*=x совпадает со значением выражения v=v*(x), за исключением того, что значение v вычисляется только один раз. Например, выражение v[++i]*=7+3 означает (++i, v[i]=v[i]*(7+3)), а не (v[++i]=v[++i]*(7+3)) (которое может быть неопределенным;.
Выражение throw
throw x Генерирует значение x
Результат выражения throw имеет тип void.
Выражение “запятая”
x,y
Выполняет инструкцию x, а затем у. Результатом является результат инструкции у
Каждая таблица содержит операторы, имеющие одинаковый приоритет. Операторы в более высоко расположенных таблицах имеют более высокий приоритет по сравнению с операторами, расположенными ниже. Например, выражение a+b*c означает a+(b*c), а не (a+b)*c, поскольку оператор * имеет более высокий приоритет по сравнению с оператором +. Аналогично, выражение *p++ означает *(p++), а не (*p)++. Унарные операторы и операторы присваивания являются правоассоциативными (right-associative); все остальные — левоассоциативными. Например, выражение a=b=c означает a=(b=c), а выражение a+b+c означает (a+b)+c.
Lvalue — это объект, допускающий модификацию. Очевидно, что объект lvalue, имеющий спецификатор const, защищен от модификации системой типов и имеет адрес. Противоположностью выражения lvalue является выражение rvalue, т. е. выражение, идентифицирующее нечто, что не может быть модифицировано или не имеет адреса, например, значение, возвращаемое функцией (&f(x) — ошибка, поскольку значение, возвращаемое функцией f(x), является значением rvalue).
Опубликовал katy
May 01 2015 12:02:29 ·
0 Комментариев ·
2652 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.