2010-04-10 13 views
6

Podría alguien ayudarme a entender siguiente línea de código:¿Qué significa esta línea de código C++ "sol <? = F ((1 << n) -1, i, 0) + abs (P [i]) * precio;"

sol< ?=f((1<< n)-1,i,0)+abs(P[i])*price; 

estoy estudiando un algoritmo escrito usando C++ y que tiene las siguientes operador < ?=. Mi problema es comprender al operador < ?=. También cuando compilo este código usando el compilador g ++, aparece el mensaje de error para la línea de código de línea anterior de código

siguiente es el mensaje de error devuelto.

Hello.cpp: In function ‘int main()’:

Hello.cpp:115: error: ‘memset’ was not declared in this scope

Hello.cpp:142: error: expected primary-expression before ‘?’ token

Hello.cpp:142: error: expected primary-expression before ‘=’ token

Hello.cpp:142: error: expected ‘:’ before ‘;’ token

Hello.cpp:142: error: expected primary-expression before ‘;’ token

Tal < ?= no es un solo operador, pero no puedo entender qué es exactamente esta línea de código.

Gracias de antemano por el tiempo que pasó leyendo esta publicación.

+1

¿Cuál es el contexto en torno a esta línea? ¿Estás seguro de que en realidad es C o C++? –

+0

Hola Frank Aquí está el código completo http://pastebin.com/aSZCSeTZ. Obtuve esta línea de código de un Algoritmo enviado para Google Code Jam 2008. Este algoritmo obtuvo el primer lugar en esa competencia. – KItis

+0

Si este código proviene del Google Code jam 2008, ¿puede darle un puntero al original en la lista de finales: http://code.google.com/codejam/contest/scoreboard?c=32011#vf=1 –

Respuesta

23

Es una extensión de GNU. Básicamente es un operador "menor que".

int a = 3; 
a <?= 2; 
cout << a << endl; // prints 2, because 2 < 3 

a <?= 10; 
cout << a << endl; // prints 2 as well, because 10 > 2 

Leer más here.

+0

Gracias budy, eres un héroe :) – KItis

+7

Ya sabes, cada vez que creo que he visto hasta el último pedazo de maldad de GCC, me muevo entre los ojos con algo aún más malvado. +1 para ti. -100,000 para el equipo de GCC. ¡Uf! –

+0

He compilado el código anterior usando el compilador g ++, ¿tiene alguna idea sobre por qué se devuelve el error anterior? – KItis

-1

Esta línea no es una línea de código. Es por eso que no compila. No tiene sentido preguntar qué hace.

+0

Quiero saber sobre el operador " KItis

+0

No hay operador '

+0

http://pastebin.com/aSZCSeTZ, aquí está el enlace al código completo al que me refiero. Este código ha dado el primer lugar en Google Code jam 2008. Por eso estoy interesado en saber cómo funciona realmente – KItis

0

Tome un vistazo a la gramática C here

El único uso de ? está en el operador ternario:

conditional_expression 
    : logical_or_expression 
    | logical_or_expression '?' expression ':' conditional_expression 
    ; 

Cuando el ? va seguida de una expresión. Esto no sucede en tu caso. Por lo que su código es no válido C.

+0

http://pastebin.com/aSZCSeTZ, aquí está el enlace al código completo de C++ Me refiero a – KItis

1

Casi podría ser una línea de código PHP sin embargo: todo lo que necesita es quitar un espacio para formar al final.

<?= foo(); ?> 

es equivalente a

<?php echo foo(); ?> 
+0

http: //pastebin.com/aSZCSeTZ este es el código completo de C++ al que me refiero aquí. – KItis

2

Para que quede claro para cualquiera que lea esto y no pueda seguir; <?= y >?= son versiones de asignación de <? y >? que están en desuso las extensiones de GCC que sirvieron para el propósito de (x>y)?x:y o (x<y)?x:y respectivamente.

Por lo tanto, sería x <?= y;x = x <? y; que es x = (x<y) ? x : y;

La mayoría de los fabricantes de compiladores introducen extensiones de lenguaje, y muchos lo hacen en los futuros estándares del lenguaje. Por lo general, estas extensiones son muy fáciles de agregar o simplifican el trabajo de escribir bibliotecas estándar.

+0

Gracias por la información – KItis

Cuestiones relacionadas