Sie sind auf Seite 1von 19

9.

1 Operadores aritmticos
1 Sinopsis Los operadores aritmticos se usan para realizar clculos de aritmtica de nmeros reales y de aritmtica de punteros. C++ dispone de los siguientes: + ++ -* / % Dos posibilidades: Suma binaria Incremento unitario (dos clases Dos posibilidades: Resta binaria Decremento unitario (dos clases ) ; menos unitario ) ) . ; ms unitario .

Multiplicacin (este smbolo tiene tambin otros usos Divisin . .

Resto o mdulo

Nota: la aritmtica de nmeros reales es la clsica de la escuela primaria. La de punteros es una aritmtica un tanto especial y rudimentaria ( 4.2.2).

2 Observaciones Los operadores aritmticos pertenecen a dos grupos: unos aceptan operandos de tipo numrico; otros aceptan operandos de tipo puntero-a-tipoX [3]. Adems son de dos tipos; unarios (que aceptan un solo operando) y binarios (que aceptan dos). La clasificacin es la siguiente: Operadores aritmticos unarios: + ++ -ms unitario. Incremento unitario (dos clases) menos unitario. Decremento unitario (dos clases)

Operadores artimticos binaros: + * / % Suma binaria. Resta binaria. Multiplicacin Divisin. Resto o mdulo.

Estos ltimos pueden combinarse con el de asignacin = para dar origen a operadores compuestos ( 4.9.2) son los siguientes: += Asigna suma

-= *= /= %=

Asigna diferencia (resta) Asigna producto Asigna divisin Asigna resto (mdulo)

Tenga en cuenta que existen distintos operadores enmascarados bajo los mismos smbolos + y -. Es un caso de sobrecarga incluida en el propio lenguaje [1]. Como en el resto de los casos de sobrecarga, el compilador deduce por el contexto de que versin del operador se trata. Como veremos inmediatamente, en C++ es perfectamente vlida una expresin del tipo: int x = *ptr+-*++ptr; En el ejemplo siguiente se muestran los casos posibles: int ai[] int* ptr int r1 = int r2 = int r3 = int r4 = int r5 = unitario int r6 = = {2, 3}; = ai; +ai[0]; -ai[1] ai[0] + ai[1]; ai[1] - ai[0] ai[0] + -ai[1]; *ptr + -*++ptr;

// // // // //

L.3: L.3: L.4: L.5: L.6:

ms unitario sobre tipo numrico menos unitario sobre tipo numrico 2 + 3 suma binaria (de enteros) 3 - 2 resta binaria (de enteros) 2 +(-3) suma binaria seguida de menos

// L.7: Suma binaria (de enteros) a + (-b)

En L.7 coexisten tres operadores aritmticos no homogneos (de izquierda a derecha): + Suma binaria entre valores numricos tipo int ( Negacin unitaria de un valor numrico tipo int ( ). Los valores *ptr y -*++ptr ); el valor *(++ptr)

++ Preincremento de un puntero-a-int ( entero: ++ptr == ptr = ptr + 1

). Equivale a suma binaria de puntero y

Nota: aunque vlida, la sentencia de L.7 es un ejemplo de expresin peligrosa y desaconsejada. En 4.9.0a se ha presentado una explicacin del sorpresivo resultado ( 0 ) que se obtiene para L.6.

3 Suma y resta binaria En el primer caso: suma y resta binaria, caben dos posibilidades sintcticas: a- expresin-suma + expresin-de-multiplicacin b- expresin-suma - expresin-de-multiplicacin

3.1 Operador Suma binaria Las posibilidades para los operandos en la expresin A + B son los siguientes:

1. A y B son tipos aritmticos, enteros o fraccionarios ( 2.2.1). En este caso ambos operandos estn sujetos a las posibles conversiones aritmticas estndar ( 2.2.5) y el resultado es la suma aritmtica de ambos. Ejemplo: int x = 10, y = 20; int z = x + y;

// z == 30

2. A es un entero y B es un puntero a objeto. Ejemplo: int arr[5] = {1, 2, 3, 4, 5}; int* ptr = &arr[0]; // Seala a 1 int x = *(2 + ptr); // x == 3 3. A es un puntero a objeto y B es un entero. En estos dos ltimos casos se aplican las reglas de aritmtica de punteros ( 4.2.2). Ejemplo: int z = *(ptr + 3); // x == 4

3.2 Operador Resta binaria. Las posibilidades para los operandos en la expresin A - B son los siguientes: 1. A y B son de tipo aritmtico, entero o fraccionario; las posibilidades son las mismas que en el caso 1 de la suma binaria expuesta anteriormente. El resultado es la resta aritmtica de ambos operandos. Ejemplo: int x = 10, y = 20; int z = x - y;

// z == -10

2. A y B son punteros a objetos de tipos compatibles. Ejemplo: int arr[5] = {1, 2, 3, 4, 5}; int* pt1 = &arr[0]; // Seala a 1 int* pt2 = &arr[4]; // Seala a 5 int x = pt2 - pt1; // x == 4 3. A es un puntero a objeto y B es un entero. En estos dos ltimos casos se aplican las reglas de aritmtica de punteros ( 4.2.2). Ejemplo: int arr[5] = {1, 2, 3, 4, 5}; int* ptr = &arr[4]; // seala a 5 int x = *(ptr - 2); // x == 3

4 Operadores Unitarios Cuando los operadores + y - se utilizan como operadores unitarios, las posibilidades sintcticas son: + <expresin-cast> - <expresin-cast>

En ambos casos <expresin-cast> debe ser de tipo numrico. Los resultados son respectivamente: Valor del operando expresin-cast despus de cualquier promocin interna que sea necesaria. Valor negativo del operando expresin-cast despus de cualquier promocin interna que se necesite.

Nota: recuerde que cuando + y - se utilizan como operadores unitarios, tienen mayor precedencia que cuando se utilizan como suma y resta binarias ( 4.9.0a). Ejemplo int int int int int x = 7, r1 = r2 = + r3 = r4 = + y = 3; (y - x); (y - x); (x - y); (x - y);

// // // //

r1 r2 r3 r4

== == == ==

4 -4 -4 4

5 Operadores multiplicacin y divisin Los operadores binarios * (multiplicacin) y / (divisin) realizan sus operaciones aritmticas correspondientes con todos los tipos numricos (enteros y fraccionarios). Sintaxis expresin-de-multiplicacin * expresin-cast expresin-de-multiplicacin / expresin-cast

6 Operador mdulo El operador binario % (operador de mdulo) devuelve el resto de la divisin de dos enteros, no puede ser utilizado con nmeros fraccionarios float o double [2]. Sintaxis expresin-de-multiplicacin % expresin-cast Ejemplo int resto = (6 % 4); cout << "El resto de 6/4 es " << resto << endl; Salida: El resto de 6/4 es 2

7 Operadores incremento y decremento

Los operadores unitarios ++ (incremento) y -- (decremento), suman y restan respectivamente una unidad al valor de la expresin. Existen dos variedades "Pre" y "Post" para cada uno de ellos. Las posibilidades sintcticas son: postfix-expression ++ ++ expresin-unitaria postfix-expression --- expresin-unitaria (postincremento) (preincremento) (postdecremento) (predecremento)

En los ejemplos que siguen suponemos que originariamente n == 5. El postincremento aade uno a la expresin despus de que se ha evaluado: x = n++ ; // -> x == 5 y n == 6

El preincremento aade uno antes de que sea evaluada la expresin. x = ++n ; // -> x == 6 y n == 6

El postdecremento resta uno del valor de la expresin despus de que sea evaluada. x = n-- ; // -> x == 5 y n == 4

El predecremento resta uno antes de la evaluacin de la expresin. x = --n ; // -> x == 4 y n == 4

En ambos casos, el operando debe ser una variable, no una expresin. Por ejemplo: (x+y)++ es ilegal.

7.1 Para evidenciar la diferencia entre preincremento y postincremento, observe las salidas que se obtienen con este pequeo programa segn se van ejecutando las diversas lneas. Para interpretarlas correctamente debe tener en cuenta la precedencia de los operadores y recordar que, en todos los casos, el argumento recibido por printf es un puntero-a-carcter (char*). Tambin deben recordarse las reglas de mbito de los argumentos pasados a funciones. char * s = "Hola mundo"; printf("Letra: \"%c\"\n", printf("Letra: \"%c\"\n", printf("Letra: \"%c\"\n", printf("Letra: \"%c\"\n", printf("Letra: \"%c\"\n", printf("Letra: \"%c\"\n", printf("Letra: \"%c\"\n", Ver otros ejemplos en 4.10.3: (

*s); *s+1); *(s+1)); *s++); *s); *++s); *s); Ejemplo-1); (

// // // // // // //

Letra Letra Letra Letra Letra Letra Letra

"H" "I" "o" "H" "o" "l" "l"

Ejemplo-2)

Tema relacionado

Sobrecarga de los operadores aritmticos (

4.9.18b2)

Inicio.

[1] Sin embargo, el lenguaje C++ no permite que las sobrecargas definidas por el usuario alteren el nmero de los operandos admitidos por un operador ( 4.9.18). [2] Para mdulo entre nmeros fraccionarios ver las funciones de Librera Estndar fmod y fmodl. [3] Desde la ptica de C++, el tipo puntero-a-tipoX no es numrico; es distinto de int, float, double, Etc. Otra cosa es que se hayan definido operadores para realizar determinadas operaciones (aritmticas) sobre ellos, y que se realice una conversin automtica o explcita de tipo ( 4.9.9d) en los casos en que se utilizan en conjuncin con tipos enteros. Adems de los operadores "aritmticos" aqu sealados, los punteros C++ disponen de operadores especficos ( 4.9.11).

Operadores aritmticos
Nombre del operador Ms unitario Suma Preincremento Postincremento Asignacin con suma Menos unitario (negacin) Resta Predecremento Postdecremento Asignacin con resta Multiplicacin Asignacin con multiplicacin Divisin Asignacin con divisin Mdulo (Resto) Asignacin con mdulo [editar]Operadores Nombre del operador Menor que Menor o igual que Sintaxis +a a + b ++a a++ a += b -a a - b --a a-a -= b a * b a *= b a / b a /= b a % b a %= b Sobrecargable Incluido en C S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S

de comparacin
Sintaxis a < b a <= b Sobrecargable Incluido en C S S S S

Mayor que Mayor o igual que No igual que Igual que Negacin lgica AND lgico OR lgico [editar]Operadores Nombre del operador Desplazamiento a la izquierda Asignacin con desplazamiento a la izquierda Desplazamiento a la derecha Asignacin con desplazamiento a la derecha Complemento a uno AND binario Asignacin con AND binario OR binario Asignacin con OR binario XOR binario Asignacin con XOR binario [editar]Otros Nombre del operador

a > b a >= b a != b a == b !a a && b a || b

S S S S S S S

S S S S S S S

a nivel de bit
Sintaxis a << b a <<= b a >> b a >>= b ~a a & b a &= b a | b a |= b a ^ b a ^= b Sobrecargable Incluido en C S S S S S S S S S S S S S S S S S S S S S S

operadores
Sintaxis Sobrecargable Incluido en C

Asignacin bsica Llamada a funcin ndice de Array Indireccin (Desreferencia) Direccin de (Referencia) Miembro de puntero Miembro Desreferencia a miembro por puntero Desreferencia a miembro por objeto Conversin de tipo Coma Condicional ternario Resolucin de mbito Puntero a funcin miembro

a = b a() a [b] *a &a a->b a.b a->*b a.*b (tipo) a a , b a ? b : c a::b a::*b sizeof a sizeof(tipo) typeid(a) typeid(tipo) new tipo new tipo[n] delete a delete[] a

S S S S S S No S No S S No No No

S S S S S S S No No S S S No No

Tamao de

No

Identificacin de tipo

No

No

Asignar almacenamiento Asignar almacenamiento (Vector) Desasignar almacenamiento Desasignar almacenamiento (Vector)

S S S S

No No No No

[editar]Extensiones Nombre del operador

del lenguaje
Sintaxis Sobrecargable Incluido en C Compilador

Direccin de la etiqueta && etiqueta

No

GCC / G++

Obtener tipo

typeof a typeof(expr)

No

GCC / G++

min y max

a <? b a >? b

No

No

G++

[editar]Precedencia

de operadores

La tabla siguiente es una lista que muestra el orden de precedencia y la asociatividad de todos los operadores del lenguaje de programacin C++. Estn listados de arriba a abajo por orden de precedencia descendente y con la misma descendencia en la misma celda (puede haber varias filas de operadores en la misma celda). La precedencia de los operadores no cambia por la sobrecarga. Una tabla de precedencias, aunque adecuada, no puede resolver todos los detalles. Por ejemplo, el operador ternario permite expresiones arbitrarias como operador central independientemente de la precedencia del resto de operadores. As a ? b , c : d es interpretado como a ? (b, c) : d en vez de (a ? b), (c : d). Tambin hay que tener en cuenta que el resultado sin parntesis de una expresin de conversin en C no puede ser el operando de sizeof. Por eso sizeof (int) * x es interpretado como(sizeof(int)) * x y no como sizeof ((int) *x).

Operador

Descripcin

Asociatividad

::

Resolucin de mbito (solo C++) Post- incremento y decremento Llamada a funcin Elemento de vector Seleccin de elemento por referencia Seleccin de elemento con puntero Informacin de tipo en tiempo de ejecucin (solo C++) Conversin de tipo (solo C++)

Izquierda a derecha

++ -() [] . -> typeid()

const_cast dynamic_cast

Conversin de tipo (solo C++) Conversin de tipo (solo C++)

reinterpret_cast Conversin de tipo (solo C++) static_cast ++ -+!~ (type) * & sizeof new new[] delete delete[] .* ->* */% +<< >> < <= > >= == != & ^ | && || c?t:f = += -= Pre- incremento y decremento Suma y resta unitaria NOT lgico y NOT binario Conversin de tipo Indireccin Direccin de Tamao de Asignacin dinmica de memoria (solo C++) Desasignacin dinmica de memoria (solo C++) Puntero a miembro (solo C++) Multiplicacin, divisin y mdulo Suma y resta Operaciones binarias de desplazamiento Operadores relaciones "menor que", "menor o igual que", "mayor que" y "mayor o igual que" Operadores relaciones "igual a" y "distinto de" AND binario XOR binario OR binario AND lgico OR lgico Operador ternario Asignaciones Derecha a izquierda Derecha a izquierda

Izquierda a derecha

*= /= %= <<= >>= &= ^= |= throw Operador Throw (lanzamiento de excepciones, solo C++) Izquierda a derecha

Coma

4.9.8 Operadores lgicos


1 Sinopsis Los operadores lgicos producen un resultado booleano, ( 3.2.1b), y sus operandos son tambin valores lgicos o asimilables a ellos (los valores numricos son asimilados a cierto o falso segn su valor sea cero o distinto de cero). Por contra, recuerde que las operaciones entre bits ( 4.9.3) producen valores arbitrarios. Los operadores lgicos son tres; dos de ellos son binarios, el ltimo (negacin) es unario. Tienen una doble posibilidad de representacin en el Estndar C++ actual: la representacin tradicional que se indica a continuacin, y la naturalintroducida recientemente que se detalla ms adelante . Y lgico && AND O lgico || OR Negacin lgica ! NOT

Las expresiones conectadas con los operadores && y || se evalan de izquierda a derecha, y la evaluacin se detiene tan pronto como el resultado verdadero o falso es conocido (muchos programas tienen una lgica que se basa en este propiedad).

2 &&

Operador Y lgico

Tambin denominado por su nombre en ingls (generalmente en maysculas) AND lgico. Devuelve un valor lgico true si ambos operandos son ciertos. En caso contrario el resultado es false. Sintaxis expr-AND-logica && expresion-OR-inclusive Comentario:

La operatoria es como sigue: El primer operando (de la izquierda) es convertido a bool. Para ello, si es una expresin, se evala para obtener el resultado (esta computacin puede tener ciertos efectos laterales). A continuacin, el valor obtenido es convertido a bool cierto/falso siguiendo las reglas de conversin estndar ( 3.2.1b). Si el resultado esfalse, el proceso se detiene y este es el resultado, sin que en este caso sea necesario evaluar la expresin de la derecha (recurdese que en el diseo de C++ prima la velocidad). Si el resultado del operando izquierdo es cierto, se contina con la evaluacin de la expresin de la derecha, que tambin es convertida a bool. Si el nuevo resultado es true, entonces el resultado del operador es true. En caso contrario el resultado es false. Nota: la Norma informa que antes de ser evaluada la expresin derecha, han sucedido todos los posibles efectos laterales de la expresin izquierda, a excepcin de la destruccin de los posibles objetos temporales que se hubiesen creado. Ejemplo: int m[3] = {0,1,2}; int x = 0; if (m && x) cout << "Cierto."; else cout << "Falso."; Salida: Falso. El valor m, que es interpretado como un puntero al primer elemento de la matriz, es transformado a un bool. Como es distinto de cero (no es un puntero nulo) el resultado es cierto. A continuacin, el valor x es convertido tambin a bool. En este caso la conversin produce falso, con lo que este es el resultado del parntesis de la sentencia if. Ejemplo #include <iostream.h> bool alto = true, bajo = false, blanco = true, negro = false; int main (void) { if (alto && bajo) { cout << "Uno cierto" << endl; } else cout << "Uno falso" << endl; if (alto && blanco) { cout << "Dos cierto" << endl; } else cout << "Dos falso" << endl; if (bajo && negro) { cout << "Tres cierto" << endl; } else cout << "Tres falso" << endl; } Salida: Uno falso Dos cierto Tres falso

3 ||

Operador O lgico

Este operador binario devuelve true si alguno de los operandos es cierto. En caso contrario devuelve false. Sintaxis expr-OR-logica || expresion-AND-logica Comentario Este operador sigue un funcionamiento anlogo al anterior. El primer operando (izquierdo) es convertido a bool. Para ello, si es una expresin, se evala para obtener el resultado (esta computacin puede tener ciertos efectos laterales). A continuacin el valor obtenido es convertido a bool cierto/falso siguiendo las reglas de conversin estndar ( 3.2.1b). Si el resultado es true, el proceso se detiene y este es el resultado, sin que en este caso sea necesario evaluar la expresin de la derecha (recurdese que en el diseo de C++ prima la velocidad). Si el resultado del operando izquierdo es false, se contina con la evaluacin de la expresin de la derecha, que tambin es convertida a bool. Si el nuevo resultado es true, entonces el resultado del operador es true. En caso contrario el resultado es false. Nota: el Estndar establece que antes de ser evaluada la expresin derecha, han sucedido todos los posibles efectos laterales de la expresin izquierda, a excepcin de la destruccin de los posibles objetos temporales que se hubieran creado. Ejemplo #include <iostream.h> bool alto = true, bajo = false, blanco = true, negro = false; int main (void) { if (alto || bajo) { cout << "Uno cierto" << endl; } else cout << "Uno falso" << endl; if (alto || blanco) { cout << "Dos cierto" << endl; } else cout << "Dos falso" << endl; if (bajo || negro) { cout << "Tres cierto" << endl; } else cout << "Tres falso" << endl; } Salida Uno cierto Dos cierto Tres falso

4 !

Operador NO lgico:

Este operador es denominado tambin negacin lgica y se representa en el texto escrito por la palabra inglesa NOT (otros lenguajes utilizan directamente esta palabra para representar el operador en el cdigo).

Sintaxis ! expresion-cast Comentario El operando expresion-cast (que puede ser una expresin que se evala a un resultado 1.2.1) es convertido a tipobool, con lo que solo puede ser uno de los valores cierto/falso. A continuacin el operador cambia su valor: Si es cierto es convertido a falso y viceversa. Resulta por tanto, que el resultado de este operador es siempre un tipo bool, aunque al existir una conversin estndar por la que un cero es convertido a false, y cualquier valor distinto de cero a true ( 3.2.1b), coloquialmente se dice que este operador convierte un operando 0 en 1 y uno no-cero en 0. En otras palabras: este operador devuelve cierto (true) si la expresin se evala a distinto de cero, en caso contrario devuelve falso (false). Ejemplo #include <iostream.h> bool alto = true, bajo = false; int main (void) { if (alto) { cout << "Uno cierto" << endl; } else cout << "Uno falso" << endl; if (!alto) { cout << "Dos cierto" << endl; } else cout << "Dos falso" << endl; if (!bajo) { cout << "Tres cierto" << endl; } else cout << "Tres falso" << endl; } Salida: Uno cierto Dos falso Tres cierto

Si E es una expresin, !E es equivalente a (0 == E). Como consecuencia, las expresiones que siguen son equivalentes dos a dos: if (! valid); if (valid == 0); ... if (valid); if (valid != 0);

7 Representacin explcita Los operadores lgicos entre valores lgicos &&, ||, !; la relacin de desigualdad !=; algunos de los operadores lgicos entre bits (&, |, ^, ~) y sus expresiones compuestas (&=, |=, ^=), tienen una representacin realmente difcil de leer, con la desventaja adicional que sus smbolos no siempre estn fcilmente accesibles en ordenadores con teclados distintos del estndar USA. Para resolver este problema, el Estndar C++ ha introducido nuevas formas para su representacin; las

denominamos formas explcitas o naturales, en razn de que se parecen ms a las palabras correspondientes del lenguaje natural. Las nuevas formas constituyen palabras-clave, y la tabla de equivalencias es la siguiente:

Palabra clave and or not bitand xor bitor compl and_eq xor_eq or_eq not_eq

Smbolo Referencia Descripcin && || ! & ^ | ~ &= ^= |= != Operador Y lgico Operador O lgico Operador negacin lgica Operador AND entre bits Operador OR exclusivo entre bits Operador OR inclusivo entre bits Operador complemento a uno de bits Asignacin compuesta (AND entre bits) Asignacin compuesta (XOR entre bits) Asignacin compuesta (OR entre bits) Operador relacional de desigualdad

4.9.3 4.9.3 4.9.3 4.9.3 4.9.3 4.9.3 4.9.3 4.9.12

Nota: ni el compilador Borland C++ 5.5 ni MS VC++ 6.0 soportan esta caracterstica del estndar, aunque el de Microsoft anuncia en su documentacin que pueden utilizarse "defines" ( 4.9.10b). Por ejemplo: #define #define #define #define #define bitand & bitor | and_eq &= or_eq |= not_eq !=

Por su parte, el compilador GNU gcc dispone de la opcin de compilacin -fno-operator-names, que permite que las palabras-clave and, bitand, bitor, compl, not, y or, no sean tratadas como sinnimos de los operadores correspondientes.

Temas relacionados: Trigrafos y digrafos ( 3.2.3e) Sobrecarga de los operadores lgicos ( Inicio

4.9.18g).

Operadores aritmeticos.
Los operadores aritmeticos que se pueden utilizar en C++ son:

Operacion Accion x++ Postincremento ++x Preincremento x-Postdecremento --x Predecremento +x + unario -x - unario x*y Multiplicacion x/y Division x%y Modulo x+y Suma x-y Resta

Los operadores incremento y decremento proporcionan una forma breve de sumar o restar 1 a una variable. Usados como prefijo, como ++i, el valor de la variable se incrementa (decrementa) antes de que la variable sea usada; usada como sufijo, como i++ el valor de la variable se incrementa (decrementa) despues de su utilizacion.
Operadores relacionales.

Los operadores relacionales comparan sus operandos y devuelven el valor 1 si la relacion es cierta, y 0 si no lo es. Son:
Operador < <= > >= == != Operadores logicos. Proposito Menor que Menor o igual que Mayor que Mayor o igual que Igual No igual

Los operadores logicos que se pueden utilizar en C++ son:


Operador Accion ! Negacion logica << Y logico || O logico

Los valores logicos en C++ estan representados por enteros: 0 es falso y un valor no cero es verdadero. Por ejemplo, el operador ! toma un operando numerico y devuelve int 1 para un operando cero y int 0 en caso contrario. El operador << devuelve 1 si los dos operandos son valores no cero, y 0 en cualquier otro caso. El operador || devuelve 1 si cualquiera de los dos operandos es no cero, y 0 en otro caso. Los operadores << y || evaluan primero el operando de su izquierda, y no evaluan el operando de la derecha si no es necesario. Por ejemplo, si y es cero, la expresion y << x/y da 0 y no realiza la division por 0. Operadores de asignacion. Un operador de asignacion altera el valor de un objeto si alterar su tipo. El operador usual de asignacion (=), copia el valor del operando de la derecha en el operando de la izquierda, aplicando las conversiones de tipo suales cuando es necesario. En C++ existen ademas los siguientes operadores de asignacion:
+= *= %= <<= ^= -= /= >>= &= |=

En cada caso, para una variable a de un tipo predefinido en C++, op = expr equivale a a = a op(expr) . Asi, por ejemplo, a+=5 equivale a a = a +5
Precedencia de operadores.

La interpretacion de cualquier expresion en C++ esta determinada por la precedencia y asociatividad de los operadores en dicha expresion. Cada operador tiene una precedencia, y los operadores en una expresion se evaluan en orden de mayor a menor precedencia. La evaluacion de operadores con la misma precedencia viene determinada por su asociatividad. Y, al igual que en matematicas, los parentesis anulan las reglas de precedencia.

En la siguiente tabla se listan los operadores en C++, su precedencia y su asociatividad. Los operadores se listan en orden de prioridad decreciente (los situados mas arriba tienen mayor prioridad). Los operadores en la misma linea horizontal tienen la misma precedencia.
Proposito Operador :: Scope (unario) :: Scope (binario) -> . Seleccion de miembros [] indices () Llamada a funcion ++ Postincremento -Postdecremento sizeof Tamao de un objeto ++ Preincremento -Predecremento *&+-!~ Operadores unarios new Crea un objeto delete Borra un objeto () Conversion de tipo (type cast) ->* .* Puntero a un miembro */% Operadores multiplicativos +Operadores aditivos <<>> Operadores bitwise <><= >= Operadores de relacion == != Operadores de igualdad & Y bitwise ^ bitwise O exclusivo | bitwise O inclusivo && Y logico || O logico ?: Operador condicional = *= /= += -= >*gt;= Operadores de asignacion &= ^= |= %= <<= , Operador coma Asociatividad De derecha a izquierda De izquierda a derecha De izquierda a derecha De izquierda a derecha De izquierda a derecha De izquierda a derecha De izquierda a derecha De derecha a izquierda De derecha a izquierda De derecha a izquierda De derecha a izquierda De derecha a izquierda De derecha a izquierda De derecha a izquierda De izquierda a derecha De izquierda a derecha De izquierda a derecha De izquierda a derecha De izquierda a derecha De izquierda a derecha De izquierda a derecha De izquierda a derecha De izquierda a derecha De izquierda a derecha De izquierda a derecha De derecha a izquierda De derecha a izquierda De derecha a izquierda

En C++ las reglas de precedencia y asociatividad de operadores corresponden a las reglas matematicas. Sin embargo, esto no funcionara, por ejemplo, con los operadores bitwise. Para tales operadores, se debe utilizar la tabla anterior, o bien parentesis.
El operador ::

El operador :: (scope) es una caracteristica nueva, puesto que no existe nada similar en C. Permite el acceso a una variable global aunque exista una variable local con el mismo nombre. El uso de :: delante del nombre de la variable, indica al compilador que debe utilizar la variable global, en lugar de la local. Ejemplo: #include <iostream.h> int indice = 13; main() { float indice = 3.2567; cout <<'El valor de la variable local es:'<< indice << '\n'; cout <<'El valor de la variable global es:'<< ::indice << '\n'; ::indice = indice + 7; cout <<'El valor de la variable local es:'<< indice << '\n'; cout <<'El valor de la variable global es:'<< ::indice << '\n'; }
La salida de este programa es:

El valor de la variable local es:3.2567 El valor de la variable global es: 13 El valor de la variable local es:3.2567 El valor de la variable global es: 10
Se recomienda no abusar del uso del operador ::. Es mejor utilizar diferentes nombres para las variables.

Das könnte Ihnen auch gefallen