Примечание. Эти фрагменты кода больше не работают в последних версиях g ++.Я скомпилировал их с версией 4.5.2, но версии 4.6.1 и 4.7.0 больше не принимают их.
Вы можете объявить анонимную структуру как тип возврата лямбда-функции в C ++ 11.Но это не красиво.Этот код присваивает значение 99 mx
:
int mx = [] () -> struct { int x, y ; } { return { 99, 101 } ; } ().x ;
Выход идеона здесь: http://ideone.com/2rbfM
В ответ на запрос Ченга:
Функция лямбдаэто новая функция в C ++ 11.Это в основном анонимная функция.Вот более простой пример лямбда-функции, которая не принимает аргументов и возвращает int
:
[] () -> int { return 99 ; }
. Вы можете присвоить это переменной (для этого нужно использовать auto
):
auto f = [] () -> int { return 99 ; } ;
Теперь вы можете назвать это так:
int mx = f() ;
Или вы можете позвонить напрямую (именно так поступает мой код):
int mx = [] () -> int { return 99 ; } () ;
Мой код просто использует struct { int x, y ; }
вместо int
..x
в конце - это обычный синтаксис члена struct
, применяемый к возвращаемому значению функции.
Эта функция не так бесполезна, как может показаться.Вы можете вызывать функцию более одного раза, чтобы получить доступ к различным членам:
auto f = [] () -> struct {int x, y ; } { return { 99, 101 } ; } ;
cout << f().x << endl ;
cout << f().y << endl ;
Вам даже не нужно вызывать функцию дважды.Этот код выполняет в точности то, что запрашивал ОП:
auto f = [] () -> struct {int x, y ; } { return { 99, 101 } ; } () ;
cout << f.x << endl ;
cout << f.y << endl ;