【问题标题】:Default value of functions from passed arguments来自传递参数的函数的默认值
【发布时间】:2015-10-30 04:27:59
【问题描述】:
double myfunc(int i, vector<custom_class>& class_vec, double x = class_vec[i].y)
{

    // do things

}

我想让函数从我传递给它的向量中获取一个默认值,除非我传递一个不同的参数,如上所述。这可能吗?

我知道这样做更容易,也许更安全(?)

double myfunc(int i, vector<custom_class>& class_vec, double x = 0)
{

    if(x == 0) x = class_vec[i].y;

    // ... then do stuff

}

但请放纵我。

【问题讨论】:

    标签: c++ function default-value


    【解决方案1】:

    这样

    double myfunc(int i, vector<custom_class>& class_vec)
    {
        return myfunc(i, class_vec, class_vec[i].y);
    }
    
    double myfunc(int i, vector<custom_class>& class_vec, double x)
    {
        // do things
    }
    

    换句话说,重载你的函数,并让两个参数版本调用具有默认值的三个参数版本。

    【讨论】:

    • 效率有区别吗?使用简单的 if 语句版本并避免额外的函数调用不是更快吗?这很酷。
    • 效率?有没有人告诉过你计算机的速度真的快。对效率的关注几乎总是虚假的,写清楚正确的代码,这是最重要的。
    • 但是要回答这个问题,大多数编译器都会内联第一个函数,所以实际上没有两个函数调用。
    • 上面的 if 版本是否被认为是不好的做法/不清楚?计算机速度很快,但如果我必须调用这个函数数百万次(我会用这个进行模拟,所以这不是一个遥远的机会),所有的小块都会加起来。
    • if 版本赋予零值一个特殊的含义,如果你想传递零值怎么办?即使这不是必需的,但它仍然是一个“技巧”并且不如我的版本清晰。还有什么分支预测和内联函数我不太确定你的版本比我的更有效..
    猜你喜欢
    • 1970-01-01
    • 2018-07-20
    • 1970-01-01
    • 2018-12-03
    • 2016-12-14
    • 1970-01-01
    • 1970-01-01
    • 2020-07-29
    • 2013-09-07
    相关资源
    最近更新 更多