首页 > 解决方案 > 没有 std:: 前缀或 using 语句的 C++ endl()

问题描述

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

#include <iostream>

int main(){
    endl(std::cout << "hello weirdness");
    return 0;
}

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

标签: c++

解决方案


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

template <class charT, class traits>
std::basic_ostream<charT, traits>& endl(std::basic_ostream<charT, traits>& os);

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


推荐阅读