Пространства имён
Варианты
Действия

Alternative operator representations

Материал из cppreference.com
< cpp‎ | language
 
 
Язык С++
Общие темы
Управление программой
Операторы условного выполнения
Операторы повторения
Операторы перехода
Функции
объявление функции
объявление лямбда-функции
шаблон функции
спецификатор inline
спецификаторы исключений (устарело)
спецификатор noexcept (C++11)
Исключения
Пространства имён
объявление пространства имён
псевдонимы пространства имён
Типы
спецификатор decltype (C++11)
Спецификаторы
cv-спецификаторы
спецификаторы продолжительности хранения
спецификатор constexpr (C++11)
спецификатор auto (C++11)
спецификатор alignas (C++11)
Инициализация
Литералы
Выражения
категории значений
порядок вычисления
альтернативные представления
Утилиты
Типы
typedef-объявление
объявление псевдонима типа (C++11)
атрибуты (C++11)
Приведения типов
неявные преобразования
const_cast-преобразование
static_cast-преобразование
dynamic_cast-преобразование
reinterpret_cast-преобразование
C-подобное и функциональное приведение типов
Выделение памяти
Классы
Особые свойства классовых функций
Специальные функции-члены
Шаблоны
шаблон класса
шаблон функции
специализация шаблона
упакованные параметры (C++11)
Разное
Ассемблерные вставки
 

В C++ (и C) исходный код может быть записан в любой не-ASCII 7-битный набор символов, который включает в себя ISO 646/ECMA-6 инвариантный набор символов. Тем не менее, несколько C++ операторов и знаков пунктуации требуют символы, которые находятся за пределами кодировки ISO 646: {, }, [, ], #, \, ^, |, ~. Чтобы иметь возможность использовать кодировки, где все или некоторые из этих символов отсутствуют, C++ определяет два вида альтернатив: дополнительные ключевые слова, которые соответствуют операторам, использующим эти символы, и специальные комбинации из двух или трех ISO 646 совместимых символов, которые интерпретируются, как если бы они были одним не-ISO 646 символом.

Содержание

[править] Альтернативные ключевые слова

Ниже представлены альтернативные варианты написания нескольких операторов, определенных в качестве ключевых слов в стандарте C++.

Primary Alternative
&& and
&= and_eq
& bitand
| bitor
~ compl
! not
!= not_eq
|| or
|= or_eq
^ xor
^= xor_eq

[править] Совместимость с С

Те же самые слова определены в языке программирования Си во включаемом файле <iso646.h> в виде макросов. Так как в C++ есть ключевые слова, то они не определены в C++ версии <iso646.h> как и в <ciso646>.

[править] Digraphs и триграфы

Следующие комбинации из двух и трех символов (орграфов и триграфов) допустимы для замены своих оригинальных символов:

Primary Digraph Trigraph
{ <% ??<
None} %> ??>
[ <: ??(
] :> ??)
# %: ??=
\ ??/
^ ??'
| ??!
~ ??-

[править] Ключевые слова

and, and_eq, bitand, bitor, compl, not, not_eq, or, or_eq, xor, xor_eq

[править] Пример

В следующем примере показано, как использовать несколько альтернативных ключевых слов:

%:include <iostream>
 
int main(int argc, char *argv<::>)
<%
    if (argc > 1 and argv<:1:> not_eq '\0') <%
        std::cout << "Hello " << argv<:1:> << '\n';
    %>
%>