首页 > 解决方案 > 为什么 Windows API 提供 2 种“返回”值的方法?

问题描述

例如GetWindowThreadProcessId()接受 2 个值,一个窗口句柄和一个接收返回值的指针(函数也总是returns值)。

有这两种选择有什么意义?我什么时候应该使用指针来“返回”一个值而不是实际返回它?

标签: c++cpointersreturnreturn-value

解决方案


他们不是一回事。

“out 参数”接收进程标识符。返回值是线程标识符。

真正的问题是为什么要使用两个单独的“给我 valuez”机制。您会认为两个“出局论点”可能更加一致。

答案是:人类。我们犯错误。我们制作不一致的 API。它发生了。

有人认为没有错误码可以返回,所以你还不如使用返回值。但是,哎呀,我们还有其他东西要返回,而 C 没有元组,所以让我们改用“输出参数”。

我们有时称这种事情为“历史原因”。你的旅费可能会改变。

可以告诉你,我个人不会在现代 C++ 中以这种方式设计这个函数。但那是现在,在 2018 年,我不做操作系统(oof,你能想象吗?)。

在一天结束时,坦率地说,没有造成任何伤害。


推荐阅读