gpt4 book ai didi

c++ - 为什么函数不能阻止不同返回类型的构造?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:33:27 25 4
gpt4 key购买 nike

std::function 允许您这样做:

std::function<void()> = []()->int{return 42;};

但不是这个:

std::function<void()> = [](int i)->int{return 42;};

大概是因为返回类型不是函数签名的一部分。但是 std::function 是一个类类型,它被赋予了返回类型并且知道构造它的函数对象的返回类型。所以这里有编译错误的可能。

为什么没有编译错误?

最佳答案

有一个bug in the C++11 standard这使得所有std::function<void(???)>完全无法使用。一些编译器将错误解释为表示存储在 std::function 中的任何内容的返回类型应该被忽略,其他只有 void 与这样的兼容 std::function .

defect resolution (通过@t.c)已修复,因此 std::function<void(???)>忽略存储对象的返回类型(和值)。

您的编译器正在使用当前的解释。

无论如何,必须将参数转换为 std::function 的参数.

简而言之,因为标准(修订版)是这么说的。

在实践中,能够丢弃返回值是很有用的。同时,您不能在没有数据的情况下调用函数或可调用对象来调用它。决定不完全匹配是可以的(所以如果参数/返回值转换,std::function 是游戏)。好了。

关于c++ - 为什么函数不能阻止不同返回类型的构造?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37647855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com