No entiendo un uso particular de un colon.
Lo encontré en el libro El lenguaje de programación C ++ de Bjarne Stroustrup, cuarta edición, sección 11.4.4 "Llamada y devolución", página 297:
void g(double y)
{
[&]{ f(y); } // return type is void
auto z1 = [=](int x){ return x+y; } // return type is double
auto z2 = [=,y]{ if (y) return 1; else return 2; } // error: body too complicated
// for return type deduction
auto z3 =[y]() { return 1 : 2; } // return type is int
auto z4 = [=,y]()−>int { if (y) return 1; else return 2; } // OK: explicit return type
}
Los dos puntos confusos aparecen en la línea 7, en la declaración return 1 : 2
. No tengo idea de lo que podría ser. No es una etiqueta ni un operador ternario.
Parece un operador ternario condicional sin el primer miembro (y sin el ?
), pero en ese caso no entiendo cómo podría funcionar sin una condición.
Respuestas:
Es un error tipográfico en el libro. Mire Errata para las impresiones segunda y tercera del lenguaje de programación C ++ . El ejemplo debe ser el siguiente:
fuente
(y)
y no soloy
?(cond) ? a : b
para mayor claridad: me ayuda a evitar la lectura errónea, por ejemplo, la declaraciónfoo = x > y ? a : b
comofoo = x ...
al leer el código.Me parece un simple error tipográfico. Probablemente debería ser:
Tenga en cuenta que, dado que la lambda no toma ningún parámetro, los parens son opcionales. Puede usar esto en su lugar, si lo prefiere:
fuente
return 1 : 2;
es un error de sintaxis, no es un código válido.Una declaración correcta sería más como en su
return (y) ? 1 : 2;
lugar.fuente