我正在阅读The C++ Programming Language, 4th Edition (by Bjarne Stroustrup ) 关于argument-dependent-lookup。这是引用(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
instd
并找到它 (in<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
. 问题是关于书中的文字。正如Lachlan Easton已经说过的,这不仅仅是一个错字。整个段落(可能)是错误的。如果这本书是另一位(鲜为人知的)作者写的,我可以接受这种错误,但我一直(现在仍然)怀疑,因为它是由 Bjarne 写的。