gpt4 book ai didi

c++ - 函数重载与函数变量初始化

转载 作者:太空宇宙 更新时间:2023-11-04 11:53:12 26 4
gpt4 key购买 nike

我想知道哪种代码在一般情况下效果更好,以及它们之间是否存在任何相关差异...

第一种情况

float x;

float foo ( float A, float B, float x = x)
{
// do stuff with A, B, x ...
}

第二种情况

float x;

float foo ( float A, float B, float x)
{
// do stuff with A, B, x ...
}
float foo ( float A, float B)
{
// do stuff with A, B, x ...
}

最佳答案

默认参数是福也是祸;它们可以让您减少构造函数的重复——这本身就是导致错误的原因。 C++11 在某种程度上解决了这个问题。

不幸的是,它们还意味着在重构代码时通常需要付出更多的努力,尤其是当您积累了越来越多的相同指纹变体时。

void someFunc(int count, void* ptr=nullptr, int count=1);

成为

void someFunc(int count, bool hasPtr=true, void* ptr=nullptr, int count=1);

将导致人们实际填写所有 3 个参数的问题。

someFunc(10, p, 0)

即将匹配成功

someFunc(/*count=*/10, /*hasPtr=*/true, /*ptr*/=NULL, /*count*/=1)

所以你将不得不做大量的额外工作来记住修复这个问题。我的经验是,其他程序员经常与这种更改发生冲突,随之而来的是严重的崩溃/行为错误。

关于c++ - 函数重载与函数变量初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17254477/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com