功能设计决策
Function design decisions
我正在用c++开发一些实用函数的库。我对该库中的函数签名有疑问。如果一个函数接受一些参数并返回一个值,那么存储该函数结果的变量是否也应该作为参数传递给该函数?我应该如何处理错误条件和错误返回值?
对于c++,你应该返回结果并处理带有异常的错误。
int calc_with_error() {
throw yourExceptionClass("Message");
}
int calc() {
return 5;
}
int main() {
int tmp=calc();
cout << calc;
}
但是结果随后被从函数复制到调用上下文。对于原始数据类型,这是最快的方法。但是,当您有复杂的数据结构时,传递对结果参数的引用可能更快——尽管它不像上面的解决方案那样干净,一个例子是:
void calc(vector<int> &result) {
result.clean();
result.add(5);
}
int main() {
vector<int> tmp;
calc(tmp);
//Do something with the vector
}
有几个选项,这在很大程度上是一个偏好问题。
在大多数情况下,您应该做的一件事是,将输出和错误分开。
通常最好返回成功/错误作为返回值,并以输出参数的形式返回数据,通过引用传递。
不要这样做:
1. 使用"magic values"作为错误指示。
2. 使用全局变量返回数据
人们经常告诉我不要返回错误值,因为这不是最佳实践。最好是给你抛出异常,这比错误码处理得好。另外,输出参数也很好,我用它们最多的是大数据,对于简单的返回,返回值应该很有用。
给你看,这当然不是很好的设计:
void checkSomething(bool& output)
{
output = doCheckages();
}
那好多了
bool checkSomething()
{
return doCheckages();
}
但是如果你处理一个大的类/结构,并且你知道你不想有很多它的实例,可能最好把它作为输出参数传递。
相关文章:
- 询问在设计我的手臂模拟器功能表示格式1
- 设计模式,以避免不必要地添加抽象函数以适应新功能
- C++功能设计
- C++设计决策:一个标头用于多个源文件...或不
- 界面设计:超载功能的安全性采用字符串和字符阵列
- 有没有办法在我的通用功能路由器设计中支持"常量引用"作为功能签名参数?
- 用于存储由第一个功能创建的指针的设计模式将在以后使用
- 如何正确设计和实施功能模板专业化
- 虚拟功能设计问题
- 功能超载类设计
- C++虚拟功能与设计模式
- 委派模板成员功能的良好设计
- C++:类功能子集的推荐设计模式
- 如何为不同的硬件功能设计具有独特实现的过程
- if/else vs虚拟功能:设计性能
- 设计一个好的C++包装器类,它包装了多个功能
- 专门为一个私人班级设计一个功能
- 工厂设计模式中的纯虚拟功能错误
- 功能设计决策
- 功能设计