功能设计决策

时间:2011-12-27 15:27:04

标签: c++

我正在用C ++开发一些实用函数库。我对该库中的函数签名有疑问。如果函数接受一些参数并返回一个值,那么存储该函数结果的变量是否也应该作为参数传递给该函数?我该如何处理错误条件并返回错误值?

3 个答案:

答案 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();
}

但是如果你处理一个大的类/结构,并且你知道你不想拥有它的大量实例,那么将它作为输出参数传递可能会更好。