请教大家一个函数的定义问题

2022-01-25 10:45:39 +08:00
 ligiggy

问题如下:

这个时候你的函数是:

double getCalculateResult(bool &ok);

还是

bool getCalculateResult(double &result);
2325 次点击
所在节点    C++
26 条回复
socketpeng
2022-01-25 10:57:07 +08:00
如果是我自己,会使用第二种。个人认为第二种写法更为直观,而且还可以把函数当成表达式放进 if 判断中
justou
2022-01-25 11:00:07 +08:00
1. double getCalculateResult(bool &ok); 表示需要强制判断
2. bool getCalculateResult(double &result); 完全可以忽略判断
3. double getCalculateResult(bool *ok=nullptr); 是否判断由调用者决定
4. std::optional<double> getCalculateResult(); 另一种强制判断
5. 抛异常

得看具体场景
ychost
2022-01-25 11:02:41 +08:00
我更喜欢抛异常
ripperdev
2022-01-25 11:04:30 +08:00
```cpp
std::pair<double, bool> getCalcResult();
auto [ret, ok] = getCalcResult();
```
newmlp
2022-01-25 11:06:32 +08:00
你爱咋定义咋定义呗,这又没标准答案
ligiggy
2022-01-25 11:09:07 +08:00
@newmlp 2 楼大哥 YYDS
ligiggy
2022-01-25 11:09:38 +08:00
@justou 感谢感谢,受教了。我没意识到第三种的好处,哈哈,就第三种了。
2i2Re2PLMaDnghL
2022-01-25 11:15:44 +08:00
@justou 再来点迷惑操作
(double*) getCalculateResult(); // 结果放堆上,用 NULL 表示出错,需要调用方 free 之
ligiggy
2022-01-25 11:17:19 +08:00
@2i2Re2PLMaDnghL 瞎搞要被 ban
Building
2022-01-25 11:17:43 +08:00
这个时候你就知道元组有多好用了
ligiggy
2022-01-25 11:32:01 +08:00
@Building 我不认为需要元组这种东西
jmc891205
2022-01-25 11:36:19 +08:00
std::tuple<double, bool> getCalResult();
Building
2022-01-25 11:37:30 +08:00
@ligiggy 假设解多元多次方程,有多个答案的时候,是不是就需要元组了?当然你可以用结构体,字典,数组等等,但是随时随地定义一个元组,是不是最直观最简单?
ligiggy
2022-01-25 11:43:12 +08:00
@Building 在我的印象中,元组的可读性很差,尤其是访问结果的时候
dangyuluo
2022-01-25 11:50:29 +08:00
std::optional 就是干这个用的,更激进一点 std::expected
dangyuluo
2022-01-25 11:51:32 +08:00
@ligiggy tuple 的可读性差但是性能很好,再说两个元素直接用 pair 好了

另外,tuple 用好了(配合 meta programming )简直是大杀器
MegrezZhu
2022-01-25 11:57:05 +08:00
absl::StatusOr<double>
ligiggy
2022-01-25 11:59:30 +08:00
@dangyuluo 我秉承 程序是写给人看的观点,能不用 tuple 和 dictionary 之类的 key value 就会避免掉。
mainjzb
2022-01-25 14:02:47 +08:00
[[nodiscard]] bool getCalculateResult(double &result);
C++远古写法

std::optional<double> getCalculateResult();
java 写法

std::tupl<double, bool> getCalculateResult();
go 写法
yolee599
2022-01-25 14:05:39 +08:00
写 C 的,更喜欢第二种

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/830425

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX