Что это значит, что что-то транзитивно в программировании?

Что это означает, что что-то транзитивно в отношении программирования? Пример следующий ( отсюда):

Директивы using транзитивны для целей неквалифицированного поиска:

Мне известно о разработке этого конкретного заявления, однако я стремлюсь к более общему объяснению, связанному с программированием.

2 ответа

Бинарные отношения ~ транзитивен тогда и только тогда, когда a ~ b а также b ~ c подразумевает a ~ c,
(Например, "выше, чем" транзитивен; "живет по соседству" - нет.)

В этом особом случае А является using B, а B это using С, и это имеет тот же эффект, что и А using С напрямую.

Транзитивный это термин из формальной логики. Это означает, что "если A имеет переходное отношение к B, а B имеет такое же отношение к C, то A имеет такое отношение к C".

Например, равенство - это переходные отношения. если A == B а также B == C тогда транзитивность - это то, что позволяет A == C чтобы быть правдой. Точно так же, менее чем переходные отношения, что означает, что если A < B а также B < C затем A < C,

Для директив using значение заключается в том, что если область содержит директиву using, которая назначает имя пространства имен, которая сама содержит директиву using для имени второго пространства имен, то эффект заключается в том, что директивы using из второго пространства имен появляются в первом,

В коде это означает, что

  namespace B
  {
        int foo;
  }

  namespace A   
  {
       using namespace B;
  }

  using namespace A;

  int main()
  {
      foo = 42;       // resolves to B::foo
  }

В приведенном выше foo в main() решает в A::foo, поскольку A имеет using namespace B, foo в main() также разрешает B::foo, Транзитивность - это формальное название того, что заставляет все это работать.

Другие вопросы по тегам