Введение

Аналогичный синтаксис в обоих языках программирования.

Это список операторов в языках программирования C и C++. Все перечисленные операторы (кроме typeof) существуют в C++; столбец "Включено в C" указывает, присутствует ли оператор также в C. Обратите внимание, что C не поддерживает перегрузку операторов. Если операторы &&, || и , (оператор-запятая) не перегружены, после вычисления первого операнда возникает точка последовательности. C++ также содержит операторы преобразования типов const_cast, static_cast, dynamic_cast и reinterpret_cast. Форматирование этих операторов означает, что их уровень приоритета не имеет значения. Большинство операторов, доступных в C и C++, также доступны в других языках семейства C, таких как C#, D, Java, Perl и PHP, с тем же приоритетом, ассоциативностью и семантикой.

Таблица

Для целей этих таблиц a, b и c обозначают допустимые значения (литералы, значения переменных или возвращаемые значения), имена объектов или l-значения, в зависимости от контекста. R, S и T обозначают любой тип или типы, а K – класс или перечислимый тип. Некоторые операторы имеют альтернативные написания с использованием диграфов и триграфов или синонимов операторов.

Операторы по битам

Все битовые операторы существуют в C и C++ и могут быть перегружены в C++. Имя оператора Синтаксис Примеры прототипа Как член K За пределами определений класса Битовое НЕ ~a Битовое И a & b Битовое ИЛИ a | b Битовое исключающее ИЛИ a ^ b Битовый сдвиг влево использует арифметический сдвиг (т.е. расширение знака), но возможен и логический сдвиг. a >> b

Критика преимущества операторов по бит и равенства

Преимущество битовых логических операторов подвергается критике. Концептуально, & и | являются арифметическими операторами, как * и +. Выражение синтаксически разбирается как (a & b) | c, тогда как выражение a & (b | c) разбирается как (a & b) | c. Это требует использования скобок чаще, чем это было бы необходимо. Исторически, синтаксического различия между битовыми и логическими операторами не существовало. В BCPL, B и ранних версиях C операторов && и || не существовало. Вместо этого & и | имели различное значение в зависимости от контекста использования – в контексте истинности (то есть, когда ожидалось булево значение, например, в if(a & b) они работали как логические операторы, а в a & b – как битовые). Они были сохранены для обеспечения обратной совместимости с существующими системами. Более того, в C++ (и последующих версиях C) операции равенства, за исключением оператора трехстороннего сравнения, возвращают значения типа bool, которые концептуально представляют собой один бит (1 или 0) и, следовательно, не вполне соответствуют "битовым" операциям.