Czytam The C ++ Programming Language, 4th Edition (by Bjarne Stroustrup ) owyszukiwanie zależne od argumentów. Oto cytat (26.3.6, Overaggressive ADL):
Wyszukiwanie zależne od argumentów (często nazywane ADL) jest bardzo przydatne w celu uniknięcia gadatliwości (14.2.4). Na przykład:
#include <iostream> int main() { std::cout << "Hello, world" << endl; // OK because of ADL }
Bez wyszukiwania zależnego od argumentów
endl
manipulator nie zostałby znaleziony. W obecnej sytuacji kompilator zauważa, że pierwszy argument do<<
jestostream
zdefiniowany wstd
. Dlatego szukaendl
wstd
i znajduje to (w<iostream>
).
A oto wynik wygenerowany przez kompilator (tryb C ++ 11):
prog.cpp: In function ‘int main()’:
prog.cpp:4:36: error: ‘endl’ was not declared in this scope
std::cout << "Hello, world" << endl;
^
Albo jest to błąd w kompilatorze, albo w książce. Co mówi norma?
Aktualizacja:
Muszę trochę wyjaśnić. Wiem, że właściwą odpowiedzią jest użycie std::endl
. Pytanie dotyczyło tekstu w książce. Jak już powiedział Lachlan Easton , nie jest to zwykła literówka. Cały akapit jest (prawdopodobnie) błędny. Mogę zaakceptować tego rodzaju błąd, jeśli książka pochodzi od innego (mniej znanego) autora, ale miałem (i nadal mam) wątpliwości, ponieważ została napisana przez Bjarne'a.
std::endl
bez błędu