? ^ – побитовое исключающее ИЛИ. Оператор сравнивает два бита и возвращает 1 только тогда, когда один из битов равен 0, а другой – 1, иначе результат будет равен 0.
? ~ – побитовая инверсия, при которой значение каждого бита меняется на противоположное.
«– побитовый сдвиг вправо. В этом случае последний бит теряется, для беззнакового значения слева вдвигается 0, для знакового – расширяется знак.
? «– побитовый сдвиг влево. В этом случае левый бит теряется, а справа вдвигается ноль.
Тернарный условный оператор Оператор? имеет три операнда. Пример его применения показан ниже.
Е1?Е2:ЕЗ
Первым выполняется операнд Е1. Если результат его выполнения равен true, то выполняется операция Е2, а ЕЗ игнорируется. Если результат выполнения Е1 равен false, то выполняется ЕЗ, а Е2 игнорируется. Например, в коротком выражении а = (х>у)?х: у переменная а всегда будет получать большее значение. Операторы сравнения и равенства
Операторы сравнения и равенства приведены в табл. 4.2.
Выполнение этих операторов между двумя операндами возвращает логический результат true, если условие выполняется, или значение false, если оно не выполняется. Операторы == и!= могут быть использованы для сравнения указателей, в то время как остальные операторы для этого использовать нельзя.
Таблица 4.2. Операторы сравнения и равенства Логические операторы
Логические операторы языка C++ приведены в табл. 4.3.
Таблица 4.3. Логические операторы Операторы указателя, разыменования и получения адреса
Оператор * предназначен для объявления указателя. Указатель содержит в себе адрес блока памяти, на который он указывает. Этот же оператор разыменовывает указатель, то есть позволяет получить доступ к содержимому объекта, на который создан указатель.
Оператор & (адрес) предназначен для получения адреса, по которому содержится значение конкретной переменной. Когда мы обращаемся к переменной по имени, мы всегда получаем доступ к ее значению, но не к области памяти, в которой это значение хранится. Иногда надо знать, в какой конкретно области памяти хранится тот или иной объект. В этом случае следует использовать оператор разыменования.
Другие операторы
? () – скобки. Они позволяют группировать выражения, обеспечивая им высший приоритет исполнения, выделять выражения проверки условия в операторах ветвления или цикла. Также скобки показывают, что определенное имя является функцией и заключают в себе параметры функций. Иногда скобки обозначают операцию явного приведения типа.
? {} – фигурные скобки. Они предназначены для обозначения начала и конца составного выражения, объединяющего несколько простых выражений.
? [] – квадратные скобки служат для объявления массивов.
? sizeof – возвращает число типа int, показывающее объем памяти в байтах, занимаемый операндом. Операнд может быть любым выражением, именем типа или объекта.
?. – точка, предназначена для выбора члена структуры или объединения в выражении типа s.m, где s – объект класса структуры или объединения, а m – член структуры или объединения.
? – > стрелка, предназначена для выбора члена структуры или объединения в выражении типа s->m, где s – указатель на объект класса структуры или объединения, а m – член структуры или объединения.
Специфичные операторы C++
?:: доступ к объекту-владельцу данного объекта, классу-владельцу данного члена или разрешение области видимости. Доступ к объекту-владельцу данного объекта для динамических объектов или к классу-владельцу для статических объектов будет рассматриваться позже.
?.* – разыменование указателя на член класса.
? – >* – разыменование указателя на указатель члена класса.
? const_cast – добавляет или удаляет из имени указателя модификатор const, когда указатель, имеющий такой модификатор, надо передать в качестве аргумента функции.
? dynamic_cast – во время выполнения программы проверяет, может ли быть указатель приведен к определенному типу или выполняет такое приведение.
? reinterpret_cast – преобразует типизированный указатель в указатель на пустой тип и обратно.
? static_cast – преобразует любой тип, известный на момент компиляции в любой другой тип, также полностью известный на момент компиляции. В том случае, если преобразование может быть выполнено другими средствами языка (например, приведение типа intк типу double), результат применения static_cast будет тем же самым.
? typeid – получает идентификатор времени исполнения для любого выражения-операнда.
Читать дальше
Конец ознакомительного отрывка
Купить книгу