Мог любой помогать мне понять следующую строку кода:
sol< ?=f((1<< n)-1,i,0)+abs(P[i])*price;
Я изучаю алгоритм записанный C++ использования, и он имеет следующий оператор < ?=
. Моя проблема с пониманием < ?=
оператор. Также, когда я компилирую этот код с помощью g ++ компилятор, он дает сообщение об ошибке для вышеупомянутой строки строки кода кода
следующее является возвращенным сообщением об ошибке.
Hello.cpp: В функциональном ‘международном основном ()’:
Привет cpp:115: ошибка: ‘memset’ не был объявлен в этом объеме
Привет cpp:142: ошибка: ожидаемое первичное выражение прежде‘?’ маркер
Привет cpp:142: ошибка: ожидаемое первичное выражение прежде ‘=’ маркер
Привет cpp:142: ошибка: ожидаемый ‘:’ прежде‘’; маркер
Привет cpp:142: ошибка: ожидаемое первичное выражение прежде‘’; маркер
Возможно, < ?=
это не ни один оператор, но я не могу понять то, что точно делает эта строка кода.
Заранее спасибо в течение времени Вы потратили читать это сообщение.
Это расширение GNU. По сути, это оператор "ниже, чем".
int a = 3;
a <?= 2;
cout << a << endl; // prints 2, because 2 < 3
a <?= 10;
cout << a << endl; // prints 2 as well, because 10 > 2
Подробнее здесь
Это может быть почти строка PHP-кода: все, что нужно, - это удалить пробел, который нужно сформировать в конце.
<?= foo(); ?>
эквивалентно
<?php echo foo(); ?>
Взгляните на Грамматика C здесь
Единственное использование ?
- в тернарном операторе:
conditional_expression
: logical_or_expression
| logical_or_expression '?' expression ':' conditional_expression
;
Где ?
следует за выражением. В вашем случае этого не происходит. Итак, ваш код недействителен C.
Эта строка не является строкой кода. Вот почему он не компилируется. Бессмысленно спрашивать, что он делает.
Чтобы быть понятным для тех, кто читает это и не может понять, =
и >?=
являются версиями назначения и
>?
, которые являются устаревшими расширениями GCC, которые служили цели (x>y)?x:y
или (x
Поэтому x = y;
будет x = x y;
что равно x = (x
Большинство производителей компиляторов вводят расширения языка, и многие из них попадают в будущие стандарты языка. Обычно эти расширения либо очень легко добавить, либо они значительно облегчают работу по написанию стандартных библиотек.