Что это значит, что что-то транзитивно в программировании?
Что это означает, что что-то транзитивно в отношении программирования? Пример следующий ( отсюда):
Директивы 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
, Транзитивность - это формальное название того, что заставляет все это работать.