[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