2016-12-17 3 views
2

У меня есть следующий фрагмент кодаПочему тернарный оператор не работает в моем коде?

mystack.empty() ? return 1 : return 0; 

, которая выглядит идеально с точки синтаксической зрения, но всякий раз, когда я пытаюсь запустить его бросает ошибку говоря

[Ошибка] Ожидается «:» перед 'возвращение'

и

[Ошибка] ожидается пр imary-expression до 'return'

Не работает ли оператор тройки с операторами возврата или что-то не так с кодом? И я думаю, что код сам объяснительный.

спасибо.

+3

_which выглядит идеальным с точки синтаксиса view_ - Нет, это не –

+4

Какой язык это? 'return' обычно является инструкцией, в то время как тернарный оператор требует двух выражений, например. 'return (mystack.empty()? 1: 0);'. – Lee

+0

@EdHeal В чем проблема? – Anoneemus

ответ

7

Синтаксис недействителен. Ternary conditional operator требует, чтобы его операнды были expressions, но return 1 и return 0 - нет.

С другой стороны, return statement может быть использован с (по желанию) выражений, такие, как тройной условный оператор:

ATTR (по желанию) возвращение выражения (необязательно); (1)

Таким образом, вы могли бы/должны написать его как

return mystack.empty() ? 1 : 0; 
+0

Технически 'return 1' также не является оператором (' return 1; 'будет) –

+0

@ M.M Так это просто недопустимое представление? Ни оператор, ни выражение. – songyuanyao

+1

Да, это не соответствует грамматике для условного оператора, потому что это не выражение (и для этого не имеет значения, что это такое, если что-либо) –

1

возвращение является утверждение и правилом является то, что вы не можете ссылаться на заявление в выражение.

попробовать переформатировать код и используя следующее (при условии, что функция возвращает логическое значение)

return mystack.empty()? 1:0; 
Смежные вопросы