在函数中使用“结果变量”与原始变量返回之间的区别?

问题描述 投票:0回答:2

所以我在使用变量进行菜单/计算器程序,我被告知要改变我的“练习题”,如下所示:

  1. 使计算器程序在单独的函数中为每种类型的计算执行计算。

我的问题是当使用这4个函数来处理四个简单算术运算中的每一个时,我不确定在这里使用以下语法之间的区别是什么:

double addition(double x, double y)
{
    return x + y;
}

是否使用本地范围的“结果”变量来返回值?

double addition(double x, double y)
{
    double result;
    result = x + y;
    return result;
}

我能想出的唯一结论是,在更高级的算术运算(如圆形区域等)中可能会更多地操纵输入x和y值,因此需要更多变量来执行该计算。

最后,两者中哪一个更好用?我知道这是一个次要问题,但我只是想学习正确的方法,以免学习糟糕的编程习惯。

c++ visual-c++
2个回答
3
投票

C ++是使用优化编译器编译的。这意味着您可以以不同的方式编写相同的代码并获得相同的程序集输出。

添加额外变量时,通常会在不改变变量生命周期时进行优化。 (或至少明显的副作用)

添加额外变量有一些优点:

  • 它有一个名称,可能使它更具可读性
  • 对于调试版本,更容易看到值并在变量上添加断点

对于您展示的示例,我希望所有现代编译器生成相同的代码。

旁注:最好不要使用未初始化的内存,可以在分配时声明变量。 (double result = x + y),tnx Neil Butterworth在评论中提出这一建议。


0
投票

最后,两者中哪一个更好用?

第一个更好。

第二个不必要地在函数的范围内引入了一个额外的变量,这使得代码更难以阅读和理解。额外的变量可能会增加可读性,但不会出现这么小的功能。

更糟糕的是,您也没有初始化对象,但允许它在没有定义值的情况下存活一段时间,因此需要稍后进行分配。这不仅增加了另一层复杂性,而且使代码更加危险,因为如果您在分配之前意外尝试读取值,则会触发未定义的行为:

double addition(double x, double y)
{
    double result;
    std::cout << result; // may crash, randomly alter the function result, do other bad things
    result = x + y;
    return result;
}

另一个结果是你不能使用autoconst(或auto const):

double addition(double x, double y)
{
    auto result; // does not compile
    result = x + y;
    return result;
}

double addition(double x, double y)
{
    double const result; // does not compile
    result = x + y;
    return result;
}

顺便说一句,我不买调试器参数支持第二种做法。一个不错的调试器能够显示未命名对象的值。以下是Visual Studio 2017中的示例:

Visual Studio 2017 debugger screenshot

© www.soinside.com 2019 - 2024. All rights reserved.