Kiti man sakė, kad rašyti panaudojant vardų erdvę std
yra neteisinga ir kad vietoj to turėčiau tiesiogiai naudoti std::cout
ir std::cin
.
Kodėl naudoti vardų erdvę std;
laikoma bloga praktika? Ar tai neefektyvu, ar kyla pavojus deklaruoti dviprasmiškus kintamuosius (kintamuosius, kurie turi tą patį vardą kaip ir std
vardų erdvės funkcija)? Ar tai turi įtakos našumui?
Tai visiškai nesusiję su našumu. Tačiau pagalvokite apie tai, kad naudojate dvi bibliotekas, pavadintas Foo ir Bar:
using namespace foo;
using namespace bar;
Viskas veikia gerai, ir jūs galite be problemų iš Foo iškviesti Blah()
, o iš Bar - Quux()
. Tačiau vieną dieną pereinate prie naujos "Foo 2.0" versijos, kuri dabar siūlo funkciją, vadinamą Quux()
. Dabar susidūrėte su konfliktu: Ir Foo 2.0, ir Bar importuoja Quux()
į jūsų globalią vardų erdvę. Tai ištaisyti prireiks nemažai pastangų, ypač jei funkcijos parametrai sutampa.
Jei būtumėte naudoję foo::Blah()
ir bar::Quux()
, tada foo::Quux()
įvedimas būtų buvęs neįvykęs.
Kita priežastis - netikėtumas.
Jei matau cout << blah
, o ne std::cout << blah
, galvoju: kas tas cout
? Ar tai įprastas cout
? Ar tai kažkas ypatingo?
Svarbiausia valdyti sudėtingumą. Naudojant vardų erdvę bus įtraukti dalykai, kurių jūs nenorite, ir dėl to galbūt bus sunkiau derinti (sakau, kad galbūt). Visur naudojant std::, bus sunkiau skaityti (daugiau teksto ir panašiai).
Arkliai - valdykite savo sudėtingumą taip, kaip geriausiai galite ir jaučiatės galintys.