Я читаю мову програмування C ++, 4-е видання (автор: Bjarne Stroustrup )аргумент-залежний-пошук. Ось цитата (26.3.6, надмірно агресивний ADL):
Залежний від аргументів пошук (який часто називають ADL) дуже корисний, щоб уникнути багатослівності (14.2.4). Наприклад:
#include <iostream> int main() { std::cout << "Hello, world" << endl; // OK because of ADL }
Без пошуку, залежного від аргументів,
endl
маніпулятор не був би знайдений. Так, компілятор зауважує, що першим аргументом<<
єostream
визначений уstd
. Тому він шукаєendl
вstd
і знаходить його (в<iostream>
).
І ось результат, отриманий компілятором (режим 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;
^
Або це помилка компілятора або книги. Що говорить стандарт?
Оновлення:
Мені потрібно трохи уточнити. Я знаю, що правильна відповідь - використовувати std::endl
. Питання було про текст у книзі. Як уже сказав Лахлан Істон , це не просто друкарська помилка. Весь абзац помилковий (можливо). Я можу прийняти такий тип помилок, якщо книга написана іншим (менш відомим) автором, але я сумнівався (і досі переживаю), оскільки її написав Бьярн.
std::endl
немає помилки