Wpis z mikrobloga

@CppPolska: Zazwyczaj większość linków jest naprawdę bardzo fajna... tak dzisiaj przy czytaniu pierwszego linku mam spotrzeżenie, problem jest tylko i wyłącznie w pierwszej linijce:

using namespace std;
  • Odpowiedz
@CppPolska: Ja pójdę o krok dalej: nie ma zupełnie nic złego w using namespace std, o ile nie używa się go w plikach nagłówkowych. Sam jednak preferuję using namespace std tylko w ograniczonym scopie, bo jakoś tak lepiej mi się czyta std::find, samo find jest jakieś takie... nagie...
  • Odpowiedz
@b33zon: Właśnie ten artykuł pokazuje że jest i dużo złego.
Do standardu zostało dodane std::size, które robi dokładnie to samo co ichniejsza implementacjia.
Powinno być użyte using std:: w każdym lokalnym skopie, który używa funkcji z std:: albo lokalnej przez ADL.
Tutaj oczywiście gdyby by było using myUtils::size; wszystko by się skompilowało. Nawet jak by typ miał własna metodę size we własnym scopie.
Najprostrze rozwiązane, to skoro implentacja robi
  • Odpowiedz
@lionbest: Ale w artykule jest wyszczególnione, że usunięcie using namespace nie poprawiło sytuacji, przez argument-depend lookup

Unfortunately, this doesn’t help. We’re getting something we don’t expect out of namespace std, but it’s not because we usinged the namespace. It’s because of argument-dependent lookup (ADL). We made an unqualified call to size, where one of the arguments was a std::vector.
  • Odpowiedz
Właśnie to jest ciekawe: bez dwóch zdań w żadnym nagłówku nie powinniśmy używać using namespace, ale sam konflikt nazw w połączeniu z ADL powoduje problemy. Miejsce w newsach zasłużone :)
  • Odpowiedz