LINUX.ORG.RU

История изменений

Исправление slovazap, (текущая версия) :

Ибо функция, которая записывает -1 в регистр, + операция сравнения всяко быстрее что адово медленных исключений

Во-первых, ещё раз: исключения это исключительные ситуации, это обычно объясняют в C++'ных яслях. При этом код на исключениях быстрее кода с возвращением значения потому что весь оверхед - одна проверка на самом низком уровне (кидать? не кидать). При возвращении же значений имеем проверку на каждом уровне.

Более того, никто не мешает изменить API так что в приведённом коде между методами будет передаваться не I2C&, а обёртка, хранящая I2C& и result. Таким образом код не изменится, но можно будет получить результат: I2C(pindata, pinclock).Send(header).Send(data).IsSuccess(). И да, кстати, на самом деле Send(header, data) без оверхеда, потому что variadic template.

Может они и редки, только вот возможно тебе за цикл нужно успеть сделать определенное количество дел, а тут у тебя тяжеленное исключение, которое сжирает кучу времени.

Солнце моё, тыжпрограммист (или хотя бы хочешь им казаться) - думай головой и делай как тебе нужно. Ошибка - нормальная ситуация? Возвращай значение. Исключительная? Кидай исключение. Речь о том что в C++ это в любом случае одна строчка пользовательского кода, а в говноси - всегда страница, как бы ты не изгалялся с API.

Исправление slovazap, :

Ибо функция, которая записывает -1 в регистр, + операция сравнения всяко быстрее что адово медленных исключений

Во-первых, ещё раз: исключения это исключительные ситуации, это обычно объясняют в C++'ных яслях. При этом код на исключениях быстрее кода с возвращением значения потому что весь оверхед - одна проверка на самом низком уровне (кидать? не кидать). При возвращении же значений имеем проверку на каждом уровне.

Более того, никто не мешает изменить API так что в приведённом коде между методами будет передаваться не I2C&, а обёртка, хранящая I2C& и result. Таким образом код не изменится, но можно будет получить результат: I2C(pindata, pinclock).Send(header).Send(data).IsSuccess(). И да, кстати, на самом деле Send(header, data) без оверхеда, потому что variadic template.

Может они и редки, только вот возможно тебе за цикл нужно успеть сделать определенное количество дел, а тут у тебя тяжеленное исключение, которое сжирает кучу времени.

Солнце моё, ты же программист - думай головой и делай как тебе нужно. ошибка - нормальная ситуация, возвращай значение. Исключительная - кидай исключение. Речь о том что в C++ это в любом случае одна строчка пользовательского кода, в говноси - страница, как бы ты не изгалялся с API.

Исходная версия slovazap, :

Ибо функция, которая записывает -1 в регистр, + операция сравнения всяко быстрее что адово медленных исключений

Во-первых, ещё раз: исключения это исключительные ситуации, это обычно объясняют в C++'ных яслях. При этом код на исключениях быстрее кода с возвращением значения потому что весь оверхед - одна проверка на самом низком уровне (кидать? не кидать). При возвращении же значений имеем проверку на каждом уровне.

Более того, никто не мешает изменить API так что в приведённом коде между методами будет передаваться не I2C&, а обёртка, хранящая I2C& и result. Таким образом код не изменится, но можно будет получить результат: I2C(pindata, pinclock).Send(header).Send(data).IsSuccess(). И да, кстати, на самом деле Send(header, data) без оверхеда, потому что variadic template.