c++ - 没有 std:: 前缀或 using 语句的 C++ endl()
问题描述
为什么在endl()
没有命名空间限定符的情况下使用 of 会编译?我已经在多个编译器上尝试过,在这里搜索了几页搜索“endl without std::”,我很困惑为什么它甚至不是警告。
#include <iostream>
int main(){
endl(std::cout << "hello weirdness");
return 0;
}
这是从另一个站点上发现的一些故意混淆的代码中提炼出来的,这不是我在实际程序中使用的东西。我只是不明白为什么它不抱怨endl
没有定义。
解决方案
std::endl
是具有以下签名的函数模板:
template <class charT, class traits>
std::basic_ostream<charT, traits>& endl(std::basic_ostream<charT, traits>& os);
当参数具有 type时std::ostream
,将发生依赖于参数的查找endl
,并在命名空间中搜索函数名称std
。
推荐阅读
- ffmpeg - RTSP流的轻量级编码方法?
- .net - 如何将 Dafny 代码与 C# 程序集链接
- r - r 逐行比较两列中的文本
- python-3.x - 导入 eventlet SSL 导致:ModuleNotFoundError: No module named 'OpenSSL.tsafe'
- json - 直到循环出现错误(powershell)
- java - 重新编译项目时如何在Java中保存系统状态并恢复系统?
- .net-core-3.1 - 在 .net core 3.1 中读取请求正文
- terraform - 创建 terraform hcl 变量作为地图
- python - 在python中删除列名中不需要的字符
- angular - 使用我自己的库时找不到模块或其对应的类型声明