Оператори во C и C++

Од Википедија, слободната енциклопедија
Прејди на: содржини, барај

Ова е листа на оператори во C и C++ програмските јазици. Сите опеартори на листата постојат во C++; Тртата колона ги покажува опраторите кои постојат и во C. Трба да се напомене дека C не подржува преоптoварување на операторот.

Следниве оператори се почетни точки во двата јазици (кога нема преоптеретување на операторот) &&, ||, ?:, и , ( опраторот запирка). 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);

// the int argument is just here to give a type signature which differ from the prefix increment

Задача на собирање 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 да не  ?

Приоритет на операторите[уреди]

Во продолжение има тaбела која ги содржи приоритетите и асоцијативноста на сите оператори во C++ и C програмските јазици (кога операторите исто така постојат во Java, Perl, PHP и многу други понови јазици приоритет е ист како дадениот). Операторите се наведени според опаѓањето на приоритетот. Опаѓањето се однесува на приоритетот на вреднувањето. Имајќи го предвид компјутерскиот израз, оператор кој е подреден во некоја низа ќе биде вреднуван пред било кој оператор кој е подреден во подалечна низа под него. Операторите кои се во иста ќелија ( може неколку низи од оператори да бидат подредени во ќелија ) се вреднувани со исто ниво, во дадена насока. Приoр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 (~). Oвие се расчленувани исто како и нивните симболични еквиваленти и можат да се користат на местото од симболот кој го заменуваат. Интерпукцијата е заменета, а не операторите. На пример адреса може да ги замени двата битови оператора И и мемориска адреса на операторот.

Сите оператори за споредување(Во табелата погоре) враќаат 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;

Дополнителни врски[уреди]