Оператори во C и C++
Ова е список на оператори во C и C++ програмските јазици. Сите опеартори на листата постојат во C++; Тртата колона ги покажува опраторите кои постојат и во C. Трба да се напомене дека C не поддржува преоптоварување на операторот.
Следниве оператори се почетни точки во двата јазици (кога нема преоптеретување на операторот) &&, ||, ?:, и , ( опраторот запирка). C++ ги содржи и операторите за претворање const_cast, static_cast, dynamic_cast, и reinterpret_cast кои ги нема во табелата поради концизност. Форматирањето на овие оператори значи дека тие немаат поголема важност во приоритетното ниво.
Оние оператори кои се во C , со исклучок на запирка и стрелка операторите, се и во Java, Perl, C#, и PHP со истиот приоритет, асоцијативност и семантика со еден исклучок: асоцијативноста на троенторниот опаератор во PHP е од лево кон десно.
Табела
уреди
Аритметички операториуреди | ||||
Име на операторот | Синтакса | Преоптеретување | Во C | Пример |
---|---|---|---|---|
единичен + | +a |
да | да | ? |
Собирање | a + b |
да | да | Type1 operator+(const Type1& a, const Type2& b);
|
Претставка за растање | ++a |
да | да | Type1& operator++ ();
|
Наставка за растење | a++ |
да | да | Type1 operator++ (int);
|
Задача на собирање | a += b |
да | да | a = a + b |
Единечен -(негација) | -a |
да | да | ? |
Одземање (разлика) | a - b |
да | да | ? |
Префикc за намалување | --a |
да | да | ? |
Наставка за намалување | a-- |
да | да | ? |
Задача со одземање | a -= b |
да | да | ? |
Множење(производ) | a * b |
да | да | ? |
Задача со множење | a *= b |
да | да | ? |
Делење (количник) | a / b |
да | да | ? |
Задача со делење | a /= b |
да | да | ? |
Модули | a % b |
да | да | ? |
Задача со мудули | a %= b |
да | да | ? |
Оператори за споредувањеуреди | ||||
Име на операторот | Синтакса | Преоптеретување | Во C | Пример |
Помало | a < b |
да | да | ? |
Помало или еднакво | a <= b |
да | да | ? |
Поголемо | a > b |
да | да | ? |
Поголемо или еднакво | a >= b |
да | да | ? |
Нееднакво | a != b |
да | да | ? |
Еднакво на | a == b |
да | да | ? |
Логички операториуреди | ||||
Име на операторот | Синтакса | Преоптеретување | Во C | Пример |
Логичка негација | !a |
да | да | ? |
Логичко И | a && b |
да | да | ? |
Логички ИЛИ | a || b |
да | да | ? |
Битови операториуреди | ||||
Име на операторот | Синтакса | Преоптеретување | Во C | Пример |
Битово лево поместување | a << b |
да | да | ? |
Задача со битово лево поместување | a <<= b |
да | да | ? |
Битово десно поместување | a >> b |
да | да | ? |
Задача со битово десно поместување | a >>= b |
да | да | ? |
Битово едно дополнување | ~a |
да | да | ? |
Битово И | a & b |
да | да | ? |
Задача со битово И | a &= b |
да | да | ? |
Битово ИЛИ | a | b |
да | да | ? |
Задача со битово ИЛИ | a |= b |
да | да | ? |
Битово XOR | a ^ b |
да | да | ? |
Задача со битов XOR | a ^= b |
да | да | ? |
Други операториуреди | ||||
Име на операторот | Синтакса | Преоптеретување | Во C | Пример |
Основна задача | a = b |
да | да | Type1& operator= (const Type1& b);
|
Повикување на функција | a() |
да | да | ? |
Низа со индекс | a[b] |
да | да | ? |
Indirection | *a |
да | да | ? |
Мемориска адреса на знакот | &a |
да | да | ? |
Член со покажувач | a->b |
да | да | ? |
Член | a.b |
не | да | ? |
Врска помеѓу покажувач и член | a->*b |
да | не | ? |
Врска меѓу покажувачот и референтниот член | a.*b |
не | не | ? |
Доделува | (type) a |
да | да | ? |
Запирка | a , b |
да | да | ? |
Троен услов | a ? b : c |
не | да | ? |
Просторна резолуција | a::b |
не | не | ? |
Покажувач на член | a::*b |
не | не | ? |
Големина на | sizeof a sizeof(type) |
не | да | ? |
Индитефукување на тип на променлива | typeid(a) typeid(type) |
не | не | ? |
Доделување на нов тип на променлива | new type |
да | не | ? |
Доделување на нов тип на низа | new type[n] |
да | не | ? |
Бришење на типот на променлива | delete a |
да | не | ? |
Бришење на типот на низа | delete[] a |
да | не | ? |
Приоритет на операторите
уредиВо продолжение има табела која ги содржи приоритетите и асоцијативноста на сите оператори во C++ и C програмските јазици (кога операторите исто така постојат во Java, Perl, PHP и многу други понови јазици приоритет е ист како дадениот). Операторите се наведени според опаѓањето на приоритетот. Опаѓањето се однесува на приоритетот на вреднувањето. Имајќи го предвид компјутерскиот израз, оператор кој е подреден во некоја низа ќе биде вреднуван пред било кој оператор кој е подреден во подалечна низа под него. Операторите кои се во иста ќелија ( може неколку низи од оператори да бидат подредени во ќелија ) се вреднувани со исто ниво, во дадена насока. Приорeтните оператори не се зафатени со преоптоварување. Синтаксата на изразите во C и C++ е прецизирана _наведена_ од граматика која не зависи од контекстот.
Оператор | Опис | Асоцијативност |
---|---|---|
::
|
Просторна резолуција (Само во C++) | Од лево кон десно |
++ --
|
зголемување и намалување на наставка | |
()
|
Повикување на функција | |
[]
|
Низа со | |
.
|
Селекција на елементи преку референца | |
->
|
Селекција на елементи преку покажувач | |
typeid()
|
Run-time type информација (Само во C++) | |
const_cast
|
Type cast (Само во C++) | |
dynamic_cast
|
Type cast (Само во C++) | |
reinterpret_cast
|
Type cast (Само во C++) | |
static_cast
|
Type cast (Само во C++) | |
++ --
|
Зголемување и намалување на претставката | Од лево кон десно |
+ -
|
Единечен плус и минус | |
! ~
|
Логичко НЕ и битово НЕ | |
(type)
|
Type cast | |
*
|
Indirection (dereference) | |
&
|
Адреса | |
sizeof
|
Големина на | |
new new[]
|
Распределба на динамичка меморија (Само во C++) | |
delete delete[]
|
Дераспределба на динамичката меморија(Само во C++) | |
.* ->*
|
Покажувач на член ( Само во C++) | Од лево кон десно |
* / %
|
Множење, делење и модули (остаток) | |
+ -
|
Собирање и одземање | |
<< >>
|
Битово лево поместување и десно поместување | |
< <=
|
Функционално „Помало“ и „Помало или еднкаво“ | |
> >=
|
Функционално „Поголемо“ и „Поголемо или еднакво“ | |
== !=
|
Функционално „Еднакво“ и „Нееднакво“ | |
&
|
Битово И | |
^
|
Битово XOR (исклучиво или) | |
|
|
Битово ИЛИ () | |
&&
|
Логичко ИЛИ | |
||
|
Логичко И | |
c ? t : f
|
Троентроен conditional (see ?:) | Од десно кон лево (Не е достапен за throw )
|
=
|
Директна задача | |
+= -=
|
Задача со збир и разлика | |
*= /= %=
|
Задача со производ, количник и остаток | |
<<= >>=
|
Задача со битово лево поместување и десно поместување | |
&= ^= |=
|
Задача со битово И, XOR, и ИЛИ | |
throw
|
Throw operator (exceptions throwing,Само во Ц++) | |
,
|
Запирка | Од лево кон десно |
Синоми на операторите во C++
уредиC++ дефинира клучни зборови кои заменуваат низа симболи кои функционираат како оператори: и (&&), адреса (&), и_еднакво (&=), или (||), bitor (|), или_еднакво (|=), xor (^), xor_еднакво (^=), не (!), нееднакво(!=), compl (~). Овие се расчленувани исто како и нивните симболични еквиваленти и можат да се користат на местото од симболот кој го заменуваат. Интерпукцијата е заменета, а не операторите. На пример адреса може да ги замени двата битови оператора И и мемориска адреса на операторот.
Сите оператори за споредување(Во табелата погоре) враќаат bool(точно-неточно).
bool a;
int b = 1;
int c = 2;
a = b == c;
Ова ќе работи бидејќи == враќа boolean, и никогаш не бара да биде внатре во условна зависносложена реченица или нешто слично. a=b==c; е исто кратенка за:
bool a;
int b = <Some Number Here>;
int c = <Some Number Here>;
if(b == c)
a = true;
else
a = false;