Действительно ли LLVM является исключением из правила для ухода от динамических бросков?

Один способ избежать, чтобы предупреждение/поведение состояло в том, чтобы сделать POST через Ajax, затем отправьте пользователя в другую страницу (или не) отдельно.

6
задан a-dai 23 October 2009 в 00:53
поделиться

3 ответа

Хотя снижение производительности - причина избегать использования dynamic_cast <> для больших иерархий классов, это не единственная причина, по которой вы, возможно, захотите их избежать. Лучше или нет, не следует больше поощрять использование dyn_cast <> из-за этого утверждения.

С другой стороны, нет абсолютно ничего плохого в использовании dynamic_cast <> когда это лучший инструмент для работы. Если его использование оправдано и является самым чистым способом решения проблемы, то это всегда правильно, независимо от «распространенного высказывания».

Я бы определенно не избегал популярных проектов просто потому, что они используют dynamic_cast <> s, goto s или любая другая идиома, которая вышла из моды.

7
ответ дан 17 December 2019 в 00:11
поделиться

Я считаю, что динамические преобразования плохи не потому, что они медленные, а потому, что они подразумевают, что ваш код слишком тесно связан.

1
ответ дан 17 December 2019 в 00:11
поделиться

Я только очень быстро рассмотрел реализацию dyn_cast и isa в документации LLVM.

Пример в коде имеет следующее:

struct bar {
  bar() {}
private:
  bar(const bar &);

};
struct foo {
  void ext() const;
  /*  static bool classof(const bar *X) {
    cerr << "Classof: " << X << "\n";
    return true;
    }*/
};

template <> inline bool isa_impl<foo,bar>(const bar &Val) {
  errs() << "Classof: " << &Val << "\n";
  return true;
}

Тест называется с B и имеет:

if (!isa<foo>(B1)) return;
if (!isa<foo>(B2)) return;

Если я правильно понимаю, что происходит, шаблон isa (который используется dyn_cast ) использует явную специализацию isa_impl для связывания панели с foo. В приведенных примерах кажется, что isa (B1) возвращает true!

В любом случае, это поведение очень отличается от поведения dynamic_cast, поэтому я действительно не думаю, что вы можете сравнивать их с

Очевидно, я неправильно понимаю, что делает LLVM, поэтому, пожалуйста, дайте мне знать, если я не понял код!

-1
ответ дан 17 December 2019 в 00:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: