[eside-ghost] Pregunta de Kung Fu C++

Alfredo Beaumont alfredo.beaumont en gmail.com
Vie Mayo 30 08:46:07 CEST 2008


Or, 2008eko Mairen 30a(e)an, STenyaK (Bruno Gonzalez)(e)k idatzi zuen:
> On 5/29/08, Jon Valdés <juanval a bildua gmail.com> wrote:
> >   ret <?= X*sneakTime + (Y-X)*walkTime;
>
> Me he pateao las secciones relevantes del stroutup, y no hay nada. Por
> la web de msdn tp veo nada (q raro, con lo que les gusta rajas los
> estándares..).
>
> Sin embargo, un colega guru de c++ me dice que lo ha visto en más de
> una ocasión, que le suena que sea alguna movida de preprocesado de
> g++, alguna abreviatura de MAX y MIN.
>
> Y en efecto, al buscar en el manual de gcc 4.3.0 (
> http://gcc.gnu.org/onlinedocs ), se puede leer que...:
> The G++ minimum and maximum operators ('<?'€and '>?') and their
> compound forms ('<?=') and '>?=') have been deprecated and are now
> removed from G++. Code using these operators should be modified to use
> std::min and std::max instead.
>
> Con lo que ahí lo tienes, el compilador GNU subvirtiendo los
> estándares, sin siquiera avisar en modo megapedántico -Wall -ansi
> -pedantic!

Efectivamente es una extensión, si encuentras cosas de estas, lo mejor es 
intentar simplificar la sintáxis:

ret <?= X*sneakTime + (Y-X)*walkTime;

<?= es un operador asignación directa, con lo que podemos intuir que equivale 
a:

ret = ret <? (X*sneakTime + (Y-X)*walkTime);

Y aquí podemos intuir que tenemos un operador ternario (?) y un operador menor 
que (<), que si los ponemos por separado sería:

ret = (ret < (X*sneakTime + (Y-X)*walkTime)) ? ret : (X*sneakTime + 
(Y-X)*walkTime)

Saludos
-- 
Alfredo Beaumont Sainz
http://www.alfredobeaumont.org/blog.cgi


Más información sobre la lista de distribución eside-ghost