/www.cppreference.com/wiki/tr/operator_precedence
#! | 432 lines | 412 code | 20 blank | 0 comment | 0 complexity | bab484622b572e75877293538ea3c690 MD5 | raw file
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="tr"
- lang="tr" dir="ltr">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>tr:operator_precedence</title>
- <meta name="generator" content="DokuWiki" />
- <meta name="robots" content="index,follow" />
- <meta name="date" content="2010-10-28T18:17:27-0700" />
- <meta name="keywords" content="tr,operator_precedence" />
- <link rel="search" type="application/opensearchdescription+xml" href="http://www.cppreference.com/wiki/lib/exe/opensearch.php" title="C++ Reference" />
- <link rel="start" href="../../index.html" />
- <link rel="contents" href="http://www.cppreference.com/wiki/tr/operator_precedence?do=index" title="İndeks" />
- <link rel="alternate" type="application/rss+xml" title="Recent Changes" href="http://www.cppreference.com/wiki/feed.php" />
- <link rel="alternate" type="application/rss+xml" title="Current Namespace" href="http://www.cppreference.com/wiki/feed.php?mode=list&ns=tr" />
- <link rel="alternate" type="text/html" title="Plain HTML" href="http://www.cppreference.com/wiki/_export/xhtml/tr/operator_precedence" />
- <link rel="alternate" type="text/plain" title="Wiki Markup" href="http://www.cppreference.com/wiki/_export/raw/tr/operator_precedence" />
- <link rel="canonical" href="operator_precedence" />
- <link rel="stylesheet" media="screen" type="text/css" href="../lib/exe/css.php@t=custom1&tseed=1289693594" />
- <link rel="stylesheet" media="all" type="text/css" href="../lib/exe/css.php@s=all&t=custom1&tseed=1289693594" />
- <link rel="stylesheet" media="print" type="text/css" href="../lib/exe/css.php@s=print&t=custom1&tseed=1289693594" />
- <script type="text/javascript" ><!--//--><![CDATA[//><!--
- var NS='tr';var JSINFO = {"id":"tr:operator_precedence","namespace":"tr"};
- //--><!]]></script>
- <script type="text/javascript" charset="utf-8" src="../lib/exe/js.php@tseed=1289693594" ></script>
- </head>
- <body>
- <div class="dokuwiki export">
- <!-- TOC START -->
- <div class="toc">
- <div class="tocheader toctoggle" id="toc__header">İçindekiler</div>
- <div id="toc__inside">
- <ul class="toc">
- <li class="clear">
- <ul class="toc">
- <li class="level2"><div class="li"><span class="li"><a href="operator_precedence#c_operatoer_oencelikleri" class="toc">C++ Operatör Öncelikleri</a></span></div></li>
- <li class="level2"><div class="li"><span class="li"><a href="operator_precedence#order_of_evaluation_and_of_side_effects" class="toc">Order of Evaluation and of Side Effects</a></span></div></li>
- <li class="level2"><div class="li"><span class="li"><a href="operator_precedence#overloading_of_operators" class="toc">Overloading of Operators</a></span></div></li></ul>
- </li></ul>
- </div>
- </div>
- <!-- TOC END -->
- <h2 class="sectionedit1"><a name="c_operatoer_oencelikleri" id="c_operatoer_oencelikleri">C++ Operatör Öncelikleri</a></h2>
- <div class="level2">
- <p>
- Bu listede yukarıda bulunan operatörler önce değerlendirilir. Aynı grup içindeki operatörler eşit önceliğe sahiptir. Aksi belirtilmedikçe soldan-sağa doğru değerlendirilirler.
- </p>
- <div class="table sectionedit2"><table class="inline">
- <tr class="row0">
- <th class="col0 centeralign"> Operatör </th><th class="col1 centeralign"> Açıklama </th><th class="col2 centeralign"> Örnek </th><th class="col3 centeralign"> Overloadable </th>
- </tr>
- <tr class="row1">
- <td class="col0 centeralign" colspan="4"> <em class="u"><strong>Group 1</strong></em> <br/>
- (no associativity) </td>
- </tr>
- <tr class="row2">
- <td class="col0"><code>::</code></td><td class="col1">Scope resolution operator</td><td class="col2">Class::age = 2;</td><td class="col3">NO</td>
- </tr>
- <tr class="row3">
- <td class="col0 centeralign" colspan="4"> <em class="u"><strong>Group 2</strong></em> </td>
- </tr>
- <tr class="row4">
- <td class="col0"><code>()</code></td><td class="col1">Function call</td><td class="col2">isdigit('1')</td><td class="col3">YES</td>
- </tr>
- <tr class="row5">
- <td class="col0"><code>()</code></td><td class="col1">Member initalization </td><td class="col2"> c_tor(int x, int y) : _x(x), _y(y*10){};</td><td class="col3">YES</td>
- </tr>
- <tr class="row6">
- <td class="col0"><code>[]</code></td><td class="col1">Array access</td><td class="col2">array[4] = 2;</td><td class="col3">YES</td>
- </tr>
- <tr class="row7">
- <td class="col0"><code>-></code></td><td class="col1">Member access from a pointer</td><td class="col2">ptr->age = 34;</td><td class="col3">YES</td>
- </tr>
- <tr class="row8">
- <td class="col0"><code>.</code></td><td class="col1">Member access from an object</td><td class="col2">obj.age = 34;</td><td class="col3">NO</td>
- </tr>
- <tr class="row9">
- <td class="col0"><code>++</code></td><td class="col1">Post-increment</td><td class="col2">for( int i = 0; i < 10; i++ ) cout << i;</td><td class="col3">YES</td>
- </tr>
- <tr class="row10">
- <td class="col0"><code>--</code></td><td class="col1">Post-decrement</td><td class="col2">for( int i = 10; i > 0; i-- ) cout << i;</td><td class="col3">YES</td>
- </tr>
- <tr class="row11">
- <td class="col0"><code>const_cast</code></td><td class="col1">Special cast</td><td class="col2">const_cast<type_to>(type_from);</td><td class="col3">NO</td>
- </tr>
- <tr class="row12">
- <td class="col0"><code>dynamic_cast</code></td><td class="col1">Special cast</td><td class="col2">dynamic_cast<type_to>(type_from);</td><td class="col3">NO</td>
- </tr>
- <tr class="row13">
- <td class="col0"><code>static_cast</code></td><td class="col1">Special cast</td><td class="col2">static_cast<type_to>(type_from);</td><td class="col3">NO</td>
- </tr>
- <tr class="row14">
- <td class="col0"><code>reinterpret_cast</code></td><td class="col1">Special cast</td><td class="col2">reinterpret_cast<type_to>(type_from);</td><td class="col3">NO</td>
- </tr>
- <tr class="row15">
- <td class="col0"><code>typeid</code></td><td class="col1">Runtime type information</td><td class="col2">cout « typeid(var).name(); <br/>
- cout « typeid(type).name();</td><td class="col3">NO</td>
- </tr>
- <tr class="row16">
- <td class="col0 centeralign" colspan="4"> <strong>Group 3</strong><br/>
- (right-to-left associativity) </td>
- </tr>
- <tr class="row17">
- <td class="col0"><code>!</code></td><td class="col1">Logical negation</td><td class="col2">if( !done ) …</td><td class="col3">YES</td>
- </tr>
- <tr class="row18">
- <td class="col0"><code>not</code></td><td class="col1" colspan="3">Alternate spelling for ! </td>
- </tr>
- <tr class="row19">
- <td class="col0"><code>~</code></td><td class="col1">Bitwise complement</td><td class="col2">flags = ~flags;</td><td class="col3">YES</td>
- </tr>
- <tr class="row20">
- <td class="col0"><code>compl</code></td><td class="col1" colspan="3">Alternate spelling for ~ </td>
- </tr>
- <tr class="row21">
- <td class="col0"><code>++</code></td><td class="col1">Pre-increment</td><td class="col2">for( i = 0; i < 10; ++i ) cout << i;</td><td class="col3">YES</td>
- </tr>
- <tr class="row22">
- <td class="col0"><code>--</code></td><td class="col1">Pre-decrement</td><td class="col2">for( i = 10; i > 0; --i ) cout << i;</td><td class="col3">YES</td>
- </tr>
- <tr class="row23">
- <td class="col0"><code>-</code></td><td class="col1">Unary minus</td><td class="col2">int i = -1;</td><td class="col3">YES</td>
- </tr>
- <tr class="row24">
- <td class="col0"><code>+</code></td><td class="col1">Unary plus</td><td class="col2">int i = +1;</td><td class="col3">YES</td>
- </tr>
- <tr class="row25">
- <td class="col0"><code>*</code></td><td class="col1">Dereference</td><td class="col2">int data = *intPtr;</td><td class="col3">YES</td>
- </tr>
- <tr class="row26">
- <td class="col0"><code>&</code></td><td class="col1">Address of</td><td class="col2">int *intPtr = &data;</td><td class="col3">YES</td>
- </tr>
- <tr class="row27">
- <td class="col0"><code>new</code></td><td class="col1">Dynamic memory allocation</td><td class="col2">long *pVar = new long; <br/>
- MyClass *ptr = new MyClass(args);</td><td class="col3">YES</td>
- </tr>
- <tr class="row28">
- <td class="col0"><code>new []</code></td><td class="col1">Dynamic memory allocation of array</td><td class="col2">long *array = new long[n];</td><td class="col3">YES</td>
- </tr>
- <tr class="row29">
- <td class="col0"><code>delete</code></td><td class="col1">Deallocating the memory</td><td class="col2"> delete pVar;</td><td class="col3">YES</td>
- </tr>
- <tr class="row30">
- <td class="col0"><code>delete []</code></td><td class="col1">Deallocating the memory of array</td><td class="col2"> delete [] array;</td><td class="col3">YES</td>
- </tr>
- <tr class="row31">
- <td class="col0"><code>(type)</code></td><td class="col1">Cast to a given type</td><td class="col2">int i = (int) floatNum;</td><td class="col3">YES</td>
- </tr>
- <tr class="row32">
- <td class="col0"><code>sizeof</code></td><td class="col1">Return size of an object or type</td><td class="col2">int size = sizeof floatNum; <br/>
- int size = sizeof(float);</td><td class="col3">NO</td>
- </tr>
- <tr class="row33">
- <td class="col0 centeralign" colspan="4"> <strong>Group 4</strong> </td>
- </tr>
- <tr class="row34">
- <td class="col0"><code>->*</code></td><td class="col1">Member pointer selector</td><td class="col2">ptr->*var = 24;</td><td class="col3">YES</td>
- </tr>
- <tr class="row35">
- <td class="col0"><code>.*</code></td><td class="col1">Member object selector</td><td class="col2">obj.*var = 24;</td><td class="col3">NO</td>
- </tr>
- <tr class="row36">
- <td class="col0 centeralign" colspan="4"> <strong>Group 5</strong> </td>
- </tr>
- <tr class="row37">
- <td class="col0"><code>*</code></td><td class="col1">Multiplication</td><td class="col2">int i = 2 * 4;</td><td class="col3">YES</td>
- </tr>
- <tr class="row38">
- <td class="col0"><code>/</code></td><td class="col1">Division</td><td class="col2">float f = 10.0 / 3.0;</td><td class="col3">YES</td>
- </tr>
- <tr class="row39">
- <td class="col0"><code>%</code></td><td class="col1">Modulus</td><td class="col2">int rem = 4 % 3;</td><td class="col3">YES</td>
- </tr>
- <tr class="row40">
- <td class="col0 centeralign" colspan="4"> <strong>Group 6</strong> </td>
- </tr>
- <tr class="row41">
- <td class="col0"><code>+</code></td><td class="col1">Addition</td><td class="col2">int i = 2 + 3;</td><td class="col3">YES</td>
- </tr>
- <tr class="row42">
- <td class="col0"><code>-</code></td><td class="col1">Subtraction</td><td class="col2">int i = 5 - 1;</td><td class="col3">YES</td>
- </tr>
- <tr class="row43">
- <td class="col0 centeralign" colspan="4"> <strong>Group 7</strong> </td>
- </tr>
- <tr class="row44">
- <td class="col0"><code><<</code></td><td class="col1">Bitwise shift left</td><td class="col2">int flags = 33 << 1;</td><td class="col3">YES</td>
- </tr>
- <tr class="row45">
- <td class="col0"><code>>></code></td><td class="col1">Bitwise shift right</td><td class="col2">int flags = 33 >> 1;</td><td class="col3">YES</td>
- </tr>
- <tr class="row46">
- <td class="col0 centeralign" colspan="4"> <strong>Group 8</strong> </td>
- </tr>
- <tr class="row47">
- <td class="col0"><code><</code></td><td class="col1">Comparison less-than</td><td class="col2">if( i < 42 ) …</td><td class="col3">YES</td>
- </tr>
- <tr class="row48">
- <td class="col0"><code><=</code></td><td class="col1">Comparison less-than-or-equal-to</td><td class="col2">if( i <= 42 ) ...</td><td class="col3">YES</td>
- </tr>
- <tr class="row49">
- <td class="col0"><code>></code></td><td class="col1">Comparison greater-than</td><td class="col2">if( i > 42 ) …</td><td class="col3">YES</td>
- </tr>
- <tr class="row50">
- <td class="col0"><code>>=</code></td><td class="col1">Comparison greater-than-or-equal-to</td><td class="col2">if( i >= 42 ) ...</td><td class="col3">YES</td>
- </tr>
- <tr class="row51">
- <td class="col0 centeralign" colspan="4"> <strong>Group 9</strong> </td>
- </tr>
- <tr class="row52">
- <td class="col0"><code>==</code></td><td class="col1">Comparison equal-to</td><td class="col2">if( i == 42 ) ...</td><td class="col3">YES</td>
- </tr>
- <tr class="row53">
- <td class="col0"><code>eq</code></td><td class="col1" colspan="3">Alternate spelling for == </td>
- </tr>
- <tr class="row54">
- <td class="col0"><code>!=</code></td><td class="col1">Comparison not-equal-to</td><td class="col2">if( i != 42 ) …</td><td class="col3">YES</td>
- </tr>
- <tr class="row55">
- <td class="col0"><code>not_eq</code></td><td class="col1" colspan="3">Alternate spelling for != </td>
- </tr>
- <tr class="row56">
- <td class="col0 centeralign" colspan="4"> <strong>Group 10</strong> </td>
- </tr>
- <tr class="row57">
- <td class="col0"><code>&</code></td><td class="col1">Bitwise AND</td><td class="col2">flags = flags & 42;</td><td class="col3">YES</td>
- </tr>
- <tr class="row58">
- <td class="col0"><code>bitand</code></td><td class="col1" colspan="3">Alternate spelling for & </td>
- </tr>
- <tr class="row59">
- <td class="col0 centeralign" colspan="4"> <strong>Group 11</strong> </td>
- </tr>
- <tr class="row60">
- <td class="col0"><code>^</code></td><td class="col1">Bitwise exclusive OR (XOR)</td><td class="col2">flags = flags ^ 42;</td><td class="col3">YES</td>
- </tr>
- <tr class="row61">
- <td class="col0"><code>xor</code></td><td class="col1" colspan="3">Alternate spelling for ^ </td>
- </tr>
- <tr class="row62">
- <td class="col0 centeralign" colspan="4"> <strong>Group 12</strong> </td>
- </tr>
- <tr class="row63">
- <td class="col0"><code>|</code></td><td class="col1">Bitwise inclusive (normal) OR</td><td class="col2">flags = flags | 42;</td><td class="col3">YES</td>
- </tr>
- <tr class="row64">
- <td class="col0"><code>bitor</code></td><td class="col1" colspan="3">Alternate spelling for | </td>
- </tr>
- <tr class="row65">
- <td class="col0 centeralign" colspan="4"> <strong>Group 13</strong> </td>
- </tr>
- <tr class="row66">
- <td class="col0"><code>&&</code></td><td class="col1">Logical AND</td><td class="col2">if( conditionA && conditionB ) …</td><td class="col3">YES</td>
- </tr>
- <tr class="row67">
- <td class="col0"><code>and</code></td><td class="col1" colspan="3">Alternate spelling for && </td>
- </tr>
- <tr class="row68">
- <td class="col0 centeralign" colspan="4"> <strong>Group 14</strong> </td>
- </tr>
- <tr class="row69">
- <td class="col0"><code>||</code></td><td class="col1">Logical OR</td><td class="col2">if( conditionA || conditionB ) ...</td><td class="col3">YES</td>
- </tr>
- <tr class="row70">
- <td class="col0"><code>or</code></td><td class="col1" colspan="3">Alternate spelling for || </td>
- </tr>
- <tr class="row71">
- <td class="col0 centeralign" colspan="4"> <strong>Group 15</strong><br/>
- (right-to-left associativity) </td>
- </tr>
- <tr class="row72">
- <td class="col0"><code>? :</code></td><td class="col1">Ternary conditional (if-then-else)</td><td class="col2">int i = (a > b) ? a : b;</td><td class="col3">NO</td>
- </tr>
- <tr class="row73">
- <td class="col0 centeralign" colspan="4"> <strong>Group 16</strong><br/>
- (right-to-left associativity) </td>
- </tr>
- <tr class="row74">
- <td class="col0"><code>=</code></td><td class="col1">Assignment operator</td><td class="col2">int a = b;</td><td class="col3">YES</td>
- </tr>
- <tr class="row75">
- <td class="col0"><code>+=</code></td><td class="col1">Increment and assign</td><td class="col2">a += 3;</td><td class="col3">YES</td>
- </tr>
- <tr class="row76">
- <td class="col0"><code>-=</code></td><td class="col1">Decrement and assign</td><td class="col2">b -= 4;</td><td class="col3">YES</td>
- </tr>
- <tr class="row77">
- <td class="col0"><code>*=</code></td><td class="col1">Multiply and assign</td><td class="col2">a *= 5;</td><td class="col3">YES</td>
- </tr>
- <tr class="row78">
- <td class="col0"><code>/=</code></td><td class="col1">Divide and assign</td><td class="col2">a /= 2;</td><td class="col3">YES</td>
- </tr>
- <tr class="row79">
- <td class="col0"><code>%=</code></td><td class="col1">Modulo and assign</td><td class="col2">a %= 3;</td><td class="col3">YES</td>
- </tr>
- <tr class="row80">
- <td class="col0"><code>&=</code></td><td class="col1">Bitwise AND and assign</td><td class="col2">flags &= new_flags;</td><td class="col3">YES</td>
- </tr>
- <tr class="row81">
- <td class="col0"><code>and_eq</code></td><td class="col1" colspan="3">Alternate spelling for &= </td>
- </tr>
- <tr class="row82">
- <td class="col0"><code>^=</code></td><td class="col1">Bitwise exclusive or (XOR) and assign</td><td class="col2">flags ^= new_flags;</td><td class="col3">YES</td>
- </tr>
- <tr class="row83">
- <td class="col0"><code>xor_eq</code></td><td class="col1" colspan="3">Alternate spelling for ^= </td>
- </tr>
- <tr class="row84">
- <td class="col0"><code>|=</code></td><td class="col1">Bitwise normal OR and assign</td><td class="col2">flags |= new_flags;</td><td class="col3">YES</td>
- </tr>
- <tr class="row85">
- <td class="col0"><code>or_eq</code></td><td class="col1" colspan="3">Alternate spelling for |= </td>
- </tr>
- <tr class="row86">
- <td class="col0"><code><<=</code></td><td class="col1">Bitwise shift left and assign</td><td class="col2">flags <<= 2;</td><td class="col3">YES</td>
- </tr>
- <tr class="row87">
- <td class="col0"><code>>>=</code></td><td class="col1">Bitwise shift right and assign</td><td class="col2">flags >>= 2;</td><td class="col3">YES</td>
- </tr>
- <tr class="row88">
- <td class="col0 centeralign" colspan="4"> <strong>Group 17</strong> </td>
- </tr>
- <tr class="row89">
- <td class="col0"><code>throw</code></td><td class="col1">throw exception</td><td class="col2">throw EClass(“Message”);</td><td class="col3">NO</td>
- </tr>
- <tr class="row90">
- <td class="col0 centeralign" colspan="4"> <strong>Group 18</strong> </td>
- </tr>
- <tr class="row91">
- <td class="col0"><code>,</code></td><td class="col1">Sequential evaluation operator</td><td class="col2">for( i = 0, j = 0; i < 10; i++, j++ ) …</td><td class="col3">YES</td>
- </tr>
- </table></div>
- <!-- EDIT2 TABLE [230-4928] -->
- </div>
- <!-- EDIT1 SECTION "C++ Operatör Öncelikleri" [1-4929] -->
- <h2 class="sectionedit3"><a name="order_of_evaluation_and_of_side_effects" id="order_of_evaluation_and_of_side_effects">Order of Evaluation and of Side Effects</a></h2>
- <div class="level2">
- <p>
- One important aspect of C++ that is related to operator precedence is the order
- of evaluation and the order of side effects in expressions. In some
- circumstances, the order in which things happen is not defined. For example,
- consider the following code:
- </p>
- <pre class="cpp code cpp"> <span class="kw4">float</span> x <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span>
- x <span class="sy1">=</span> x <span class="sy2">/</span> <span class="sy2">++</span>x<span class="sy4">;</span></pre>
- <p>
- The value of x is not guaranteed to be consistent across different compilers,
- because it is not clear whether the computer should evaluate the left or the
- right side of the division first. Depending on which side is evaluated first, x
- could take a different value.
- </p>
- <p>
- Furthermore, while ++x evaluates to x+1, the side effect of actually storing
- that new value in x could happen at different times, resulting in different
- values for x.
- </p>
- <p>
- The bottom line is that expressions like the one above are horribly ambiguous
- and should be avoided at all costs. When in doubt, break a single ambiguous
- expression into multiple expressions to ensure that the order of evaluation is
- correct.
- </p>
- </div>
- <!-- EDIT3 SECTION "Order of Evaluation and of Side Effects" [4930-5961] -->
- <h2 class="sectionedit4"><a name="overloading_of_operators" id="overloading_of_operators">Overloading of Operators</a></h2>
- <div class="level2">
- <p>
- Overloading of operators can be very useful and very dangerous. On one hand
- overloading operators for a class you have created can help with logistics and
- readability of code. On the other you can overload an operator in such a way
- it can either obfuscate or just downright break your program. Use carefully.
- </p>
- <p>
- There are two ways to over load an operator: global function or class member.
- </p>
- <p>
- Example of overloading with a global function:
- </p>
- <pre class="cpp code cpp"> ostream <span class="sy3">&</span> operator<span class="sy1"><<</span> <span class="br0">(</span>ostream <span class="sy3">&</span> os, <span class="kw4">const</span> myClass <span class="sy3">&</span> rhs<span class="br0">)</span><span class="sy4">;</span></pre>
- <p>
- But to be able to reach any private data within a user defined class you have to
- declare the global function as a friend within the definition of the class.
- </p>
- <p>
- Example:
- </p>
- <pre class="cpp code cpp"> <span class="kw2">class</span> myClass <span class="br0">{</span>
-
- <span class="co1">// Gives the operator<< function access to 'myData'</span>
- <span class="co1">// (this declaration should not go in public, private or protected)</span>
- <span class="kw2">friend</span> ostream <span class="sy3">&</span> operator<span class="sy1"><<</span> <span class="br0">(</span>ostream <span class="sy3">&</span> lhs, <span class="kw4">const</span> myClass <span class="sy3">&</span> rhs<span class="br0">)</span><span class="sy4">;</span>
-
- <span class="kw2">private</span><span class="sy4">:</span>
- <span class="kw4">int</span> myData<span class="sy4">;</span>
- <span class="br0">}</span></pre>
- <p>
- Overloading with a class member can be done as follows:
- </p>
- <pre class="cpp code cpp"> <span class="kw2">class</span> myClass <span class="br0">{</span>
-
- <span class="kw2">public</span><span class="sy4">:</span>
- <span class="co1">// The left hand side of this operator is a pointer to 'this'.</span>
- <span class="kw4">int</span> operator<span class="sy2">+</span> <span class="br0">(</span><span class="kw4">const</span> myClass <span class="sy3">&</span> rhs<span class="br0">)</span><span class="sy4">;</span>
-
- <span class="kw2">private</span><span class="sy4">:</span>
- <span class="kw4">int</span> myData<span class="sy4">;</span>
- <span class="br0">}</span></pre>
- </div>
- <!-- EDIT4 SECTION "Overloading of Operators" [5962-] --></div>
- </body>
- </html>