为什么这个 lambda 是可流式传输的?
Why is this lambda streamable?
令我惊讶的是,以下代码打印1
.
std::cout << [](const char* arg){ return arg[0]=='s'; } << std::endl;
有人可以解释一下吗?
它正在转换为函数指针,然后通过它转换为布尔值:
void foo ();
std::cout << &foo << std::endl;
打印相同的内容和相同的警告;我碰巧使用 gcc 设置为 17 标准进行编译,我看到:
main.cpp:6:56: warning: the address of 'static constexpr bool main()::<lambda(const char*)>::_FUN(const char*)' will never be NULL [-Waddress]
std::cout << [](const char* arg){ return arg[0]=='s'; } << std::endl;
使用上面的代码,您会看到相同的警告。
补充一点我的答案:void*
有一个流过载.但是,与指向数据的指针不同,函数指针不能隐式转换为void*
。函数指针的唯一隐式转换是布尔值,当然布尔值有一个流操作,因此选择重载并发生隐式转换。请参阅: 如何使用 cout 打印函数指针?。
相关文章:
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 可组合的lambda/std::函数与std::可选
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 如何建立使用模板函数的lambda函数的尾部返回类型
- Angelscript从C++传输数组
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- 如何将lambda作为模板类的成员函数参数
- C++从其他 constexpr 创建 lambda 不能按顺序执行 Constexpr
- 在 lambda 捕获中声明的变量的类型推导
- 我可以将调用类的"this"传递给 lambda 函数吗?
- 为什么lambda在clang上崩溃而不是在gcc上崩溃
- 模板函数指针和lambda
- 两组使用lambda函数的大括号
- 使lambda不可复制/不可移动
- 从服务器传输到客户端的消息不会出现
- FLTK:按下哪个按钮 - 将数字传递给按钮的回调 (lambda)
- 尝试将lambda函数放在队列中时出现一般分配器错误(可能是与unique_ptr有关的错误)
- 将带有unique_ptr的可变 lambda 传递给 const&std::function
- 为什么这个 lambda 是可流式传输的?