我正在阅读有关C ++编程语言的第四版(由Bjarne Stroustrup撰写),参数依赖查找。这是报价(26.3.6,过度攻击性ADL):
依赖参数的查找(通常称为ADL)对于避免冗长非常有用(14.2.4)。例如:
#include <iostream> int main() { std::cout << "Hello, world" << endl; // OK because of ADL }
如果没有依赖于参数的查找,
endl
将找不到操纵器。实际上,编译器会注意到to的第一个参数<<
是在中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
。问题是关于书中的文字。正如Lachlan Easton所说,这不仅仅是错字。整个段落(可能)是错误的。如果这本书是由另一位(鲜为人知的)作者撰写的,我可以接受这种错误,但是由于(它仍然是)由Bjarne撰写,所以我一直(并且仍然)对此表示怀疑。
std::endl
没有错误