没有 std:: 前缀或 using 语句的 C++ endl()

Mik*_*sky 0 c++

为什么在endl()没有命名空间限定符的情况下会编译?我已经在多个编译器上尝试过,在这里搜索了几页搜索“没有 std:: 的 endl”,我很困惑为什么它甚至不是警告。

#include <iostream>

int main(){
    endl(std::cout << "hello weirdness");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是从在另一个站点发现的一些故意混淆的代码中提炼出来的,我不会在真正的程序中使用它。我只是不明白为什么它不抱怨endl没有定义。

Bri*_*ian 7

std::endl 是具有以下签名的函数模板:

template <class charT, class traits>
std::basic_ostream<charT, traits>& endl(std::basic_ostream<charT, traits>& os);
Run Code Online (Sandbox Code Playgroud)

当参数具有 type 时std::ostream,会发生依赖于参数的查找,并endl在命名空间中搜索函数名称std