【发布时间】:2021-12-19 02:23:45
【问题描述】:
如果我有一个返回bool 的函数版本,我想要一个不返回bool 的函数版本。我在函数定义周围尝试了nodiscard,但它不允许两个定义。
返回布尔值的函数是否与返回 void 的函数的速度相同? 如果没有,那么有没有办法声明函数的 void 和 bool 版本?
【问题讨论】:
-
您不能仅根据返回类型重载函数。如果您的目标是拥有
[[nodiscard]] bool myFunction()和void myFunction()之类的东西,并且让编译器根据您是否使用返回值来决定调用哪个...您将需要一些其他方法来区分这些函数,并且或许可以多解释一下最初是什么促使您尝试这种方法。 -
您不能有两个仅因返回类型而异的重载函数。返回一个被忽略的布尔值不需要任何成本。
-
嗯,我不太清楚函数调用在幕后是如何工作的,但我只是想通了,如果你不使用变量,编译器可以从选择正确的输出中受益。对我来说正确的输出应该是什么似乎很明显。但我不知道编译器做了什么。或者如果一个 void 函数仍然返回一个我们看不到的值。希望编译器知道我什么时候想要返回函数的 void 版本。与标准向量 emplace back 一样,它返回一个迭代器。当我使用 push back 它返回 void 所以我可以在 void 函数中返回该函数。