Nie rozumiem jednego konkretnego zastosowania okrężnicy.
Znalazłem to w książce The C ++ Programming Language Bjarne Stroustrup, wydanie 4, sekcja 11.4.4 „Call and Return”, strona 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
}
Mylący dwukropek pojawia się w linii 7 w oświadczeniu return 1 : 2
. Nie mam pojęcia, co to może być. To nie jest etykieta ani operator trójskładnikowy.
Wydaje się, że jest to warunkowy operator trójskładnikowy bez pierwszego elementu członkowskiego (i bez ?
), ale w takim przypadku nie rozumiem, jak mógłby działać bez warunku.
Odpowiedzi:
To literówka w książce. Spójrz na Errata dla drugiego i trzeciego wydruku języka programowania C ++ . Przykład musi wyglądać jak poniżej:
źródło
(y)
i nie tylkoy
?(cond) ? a : b
dla jasności - pomaga mi to uniknąć błędnego odczytania np. Instrukcji,foo = x > y ? a : b
jakfoo = x ...
przy przeglądaniu kodu.Wygląda mi na zwykłą literówkę. Prawdopodobnie powinno być:
Zauważ, że ponieważ lambda nie przyjmuje żadnych parametrów, pareny są opcjonalne. Możesz użyć tego zamiast tego, jeśli wolisz:
źródło
return 1 : 2;
jest błędem składniowym, to nieprawidłowy kod.return (y) ? 1 : 2;
Zamiast tego poprawne stwierdzenie byłoby bardziej podobne .źródło