На данный вопрос уже ответили:
Пытаюсь разобрать чужой код, не понимаю что это за выражение :
precedence([value] {
if (value == '*') {
return 2;
}
else {
return 1;
}
}()
ясно как оно работает, но что за система? Лямбда выражение? Какой стандарт?
Тут немножко не хватает - как минимум закрывающей скобки.
Часть (я переписал, чтоб не тягать многострочность)
[value] { return (value == '*') ? 2 : 1; }
представляет собой определение лямбда-выражения без передаваемых параметров, но захватывающего значение переменной value
. Пара скобок ()
после него - вызов этого лямбда-выражения. Так что если добавить забытую закрывающую скобку, то получим
precedence( /* вызов лямбда-выражения */ );
Что это - вызов функции или часть объявления переменной - без контекста неясно. Кроме того, чтоб это работало - должна быть переменная value
. Например, компилирующийся и работающий код мог бы иметь вид
int main(int argc, const char * argv[])
{
char value = '*';
int precedence([value] { return (value == '*') ? 2 : 1; }());
cout << precedence << endl;
}
Создадим альтернативный вариант
class Alternate {
const char val;
public:
Alternate(const char& n) : val(n){}
int operator ()() const { return (val == '*') ? 2 : 1; }
} ;
ну и в программе
int main()
{
char value = '*';
Alternate function_2(value);
// альтернативный вариант будет выглядеть так:
int precedence_2(function_2());
// чтобы не определить функтор, просто использовано лямбда выражение
// Лямбда выражение это анонимная функция. Приведенный вами пример
// можно написать в более читабельном виде
auto function = [value] { return (value == '*') ? 2 : 1; };
// function можно вызвать также как и другие функции(со скобками)
int precedence(function());
// у вас написано то же самое.
cout << precedence << endl << precedence_2;
return 0;
}
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
После ввода числа (например, возраста) считываю строку (например, имя-фамилию), но получаю в результате лишнюю пустую строкуОткуда она берется...
После прочтения Hidden Features и Dark Corners of С++/STL на complang
Как получить arp-таблицу текущего хоста или как найти mac-адрес по ip-адресу с помощью boostasio? Нужно что-то типа SendARP функции, только кроссплатформенной