Tôi đang đọc Ngôn ngữ lập trình C ++, Ấn bản lần thứ 4 (bởi Bjarne Stroustrup ) vềđối số-phụ thuộc-tra cứu. Đây là câu trích dẫn (26.3.6, ADL trung bình):
Tra cứu phụ thuộc vào đối số (thường được gọi là ADL) rất hữu ích để tránh dài dòng (14.2.4). Ví dụ:
#include <iostream> int main() { std::cout << "Hello, world" << endl; // OK because of ADL }
Nếu không có tra cứu phụ thuộc vào đối số, người
endl
thao tác sẽ không được tìm thấy. Như vậy, trình biên dịch nhận thấy rằng đối số đầu tiên<<
là mộtostream
được định nghĩa trongstd
. Do đó, nó sẽ tìm kiếmendl
trongstd
và tìm thấy nó (trong<iostream>
).
Và đây là kết quả được tạo ra bởi trình biên dịch (chế độ 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;
^
Đây là lỗi trong trình biên dịch hoặc trong sách. Tiêu chuẩn nói gì?
Cập nhật:
Tôi cần phải làm rõ một chút. Tôi biết rằng câu trả lời đúng là sử dụng std::endl
. Câu hỏi là về văn bản trong cuốn sách. Như Lachlan Easton đã nói, nó không chỉ là lỗi đánh máy. Toàn bộ đoạn văn là (có thể) sai. Tôi có thể chấp nhận loại lỗi này nếu cuốn sách của một tác giả khác (ít được biết đến hơn), nhưng tôi (và vẫn đang) nghi ngờ vì nó được viết bởi Bjarne.
std::endl
không có lỗi