我正在用C ++开发一些实用函数库。我对该库中的函数签名有疑问。如果函数接受一些参数并返回一个值,那么存储该函数结果的变量是否也应该作为参数传递给该函数?我该如何处理错误条件并返回错误值?
答案 0 :(得分:2)
对于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 :(得分:1)
有几种选择,这在很大程度上取决于偏好
在大多数情况下,您应该做的一件事就是将输出和错误分开
返回成功/错误作为返回值通常很好,并通过引用传递输出参数中的数据。
不要这样做:
1.使用“魔术值”作为错误指示
2.使用全局变量返回数据。
答案 2 :(得分:1)
人们经常告诉我不要返回错误值,因为这不是最好的做法。最好是抛出异常,这最好是处理错误代码。另外,输出参数很好,我最常用于大数据,对于简单的返回,返回值应该很好用。
当然,为了向您展示这在设计上并不是那么好:
void checkSomething(bool& output)
{
output = doCheckages();
}
更好
bool checkSomething()
{
return doCheckages();
}
但是如果你处理一个大的类/结构,并且你知道你不想拥有它的大量实例,那么将它作为输出参数传递可能会更好。