C-потрійний оператор ніколи не може здійснити коротке замикання, оскільки він обчислює лише один вираз a (умова), щоб визначити значення, задане виразами b і c , якщо якесь значення може бути повернуте.
Наступний код:
int ret = a ? b : c;
Це майже еквівалентно наступному коду:
int ret;
if(a) {ret = b} else {ret = c}
Вираз a може бути сформований іншими операторами, такими як && або || це може призвести до короткого замикання, оскільки вони можуть обчислити два вирази перед тим, як повернути значення, але це не буде розглядатися як тернарний оператор, що робить коротке замикання, а оператори, що використовуються в умові, як це робиться у звичайному операторі if.
Оновлення:
Існують певні суперечки щодо тернарного оператора як оператора короткого замикання. Аргумент говорить, що будь-який оператор, який не оцінює всі свої операнди, робить коротке замикання відповідно до @aruisdante у коментарі нижче. Якби дано це визначення, тоді тернарний оператор мав би коротке замикання, і у випадку, якщо це оригінальне визначення, я згоден. Проблема полягає в тому, що термін "коротке замикання" спочатку використовувався для певного типу оператора, який допускав таку поведінку, а це логічні / логічні оператори, і тому я спробую пояснити причину, чому саме такі.
Після статті Оцінка короткого замикання, оцінка короткого замикання стосується лише булевих операторів, реалізованих у мові таким чином, що, знаючи, що перший операнд зробить другий неактуальним, це означає, що оператор && є першим операндом помилковим , а для || Оператор є першим операндом true , специфікація C11 також зазначає це в 6.5.13 Оператор логічного І та 6.5.14 Оператор логічного АБО.
Це означає, що для ідентифікації поведінки короткого замикання ви очікували б ідентифікувати її в операторі, який повинен оцінити всі операнди так само, як і логічні оператори, якщо перший операнд не робить нерелевантним другий. Це відповідає тому, що написано в іншому визначенні короткого замикання в MathWorks у розділі "Логічне коротке замикання", оскільки коротке замикання походить від логічних операторів.
Як я намагався пояснити C-потрійний оператор, який також називається потрійним if, обчислює лише два операнди, він обчислює перший, а потім обчислює другий, або один із двох, що залишився, залежно від значення Перший. Він завжди це робить, не повинен оцінювати всіх трьох у будь-якій ситуації, тому в жодному разі не існує "короткого замикання".
Як завжди, якщо ви бачите, що щось не так, будь ласка, напишіть коментар із аргументом проти цього, а не просто проти, що просто погіршує досвід ТО, і я вважаю, що ми можемо бути набагато кращою спільнотою, ніж та, яка просто голосує проти відповідей з цим не погоджується.