存储std::function的不同返回类型

问题描述 投票:0回答:1

我有一种情况,我有两个不同的函数签名,其返回类型不同。

调用函数时忽略返回类型,因此它是

void
返回类型。

调用非void返回函数时是否有任何未定义的行为?

以下示例作为参考(链接运行):

#include <iostream>
#include <functional>
std::function<void(void)> f;
int main()
{
    f = []() -> int { std::cout << "Returning int\n";  return 0; };
    f(); // No registering of return type, is it UB at any circumstance?
    return 0;
}
c++ undefined-behavior std-function
1个回答
0
投票

这是有效的代码,返回将被简单地丢弃。

但是,很难通过快速检查判断这是有意还是疏忽。

使用

std::ignore
等工具澄清这是您的意图将有助于提高代码的可读性

auto g =  []() -> int { std::cout << "Returning int\n";  return 0; };

f = [&g]() -> void{ std::ignore = g(); };

//use g somewhere else or refactor
© www.soinside.com 2019 - 2024. All rights reserved.