将lambda分配给STD ::功能
assigning lambda to std::function
为什么允许第二个分配,当推断返回类型为std :: nullptr_t时?使用函数指针这是禁止的。
为什么第二个lambda不运行?
#include <cstdio>
#include <functional>
int main()
{
std::function<void* ()> f;
f = []() -> void* {
printf ("runsn");
return nullptr;
};
f();
f = []() {
printf ("doesn't runn");
return nullptr; // -> std::nullptr_t
};
f();
return 0;
}
std::function
允许您存储任何东西,只要以下内容保留您提供的签名:
- 所有参数类型都隐含地转换为存储可呼叫实体的参数类型,
- 存储的可呼叫实体的返回类型隐式转换为签名的返回类型
std::nullptr_t
隐式转换为任何指针类型,并产生该指针类型的空指针值。
请注意,您的代码实际上不是有效的C 11,因为您只有return expr;
,并且在第二个Lambda中没有落后返回类型。因此,不会发生回报类型扣除。GCC(和Clang,IIRC)将其作为扩展实现,因为它将在某个时候成为标准的一部分。
相关文章:
- 我应该实现右值推送功能吗?我应该使用std::move吗
- std::is_trivially_copyable_v 关于虚拟功能
- 字符转换功能 std::isupper() & std::islower() C++17
- 错误:在尝试检测 std::cout 是否<< t 时,功能强制转换为数组类型;有效
- 使用 std::call_once 实现类似单例的功能
- Cuda 基本程序 (将值写入矩阵和 std:cout 不起作用) ;主功能不启动
- C++ std::enable_if - 第二个参数的功能
- 如何使用 GDB 从功能C++逐步调试到 std::function 用户代码?
- 无法从好友功能访问类的私有成员?"ostream"不是"std"的成员?
- C++11 功能 std::map::at 编译旧版本的C++
- Boost Variant 是否提供与 std holds_alternative类似的功能?
- 我有模板功能.通过使用函数std::for_each,用这个容器中的最大数字替换每个正数
- 如何将标准::矢量插入具有自定义排序功能的 std::set 中
- 是否有可能通过演绎指南实现整个 std::make_tuple 功能?
- std ::功能作为默认参数的功能
- C 中STD :: vector的压实bool功能
- 如何在不接触函数本身的情况下暂停和恢复 C++11 std::thread 的功能
- 复制std ::功能多么昂贵
- 不存在从"const std::string"到"time_t"的合适转换功能
- 使用已删除的功能'std::thread::thread(const std::thread&)'