Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 单步返回语句或多步返回语句_C++_Coding Style - Fatal编程技术网

C++ 单步返回语句或多步返回语句

C++ 单步返回语句或多步返回语句,c++,coding-style,C++,Coding Style,例1: int length() { return strlen(random_string); } 例2: int length() { int str_length = 0; str_length = strlen(random_string); return str_length; } 问题: 我遇到过许多函数,其中一行代码就可以满足该函数的需要,但我记得一些关于避免这种快捷方式的事情

例1:

int length()  
{  
        return strlen(random_string);  
}
例2:

int length()  
{  
        int str_length = 0;  
        str_length = strlen(random_string);  
        return str_length;  
}  
问题:
我遇到过许多函数,其中一行代码就可以满足该函数的需要,但我记得一些关于避免这种快捷方式的事情


在某些情况下,一个比另一个更合适,或者我应该一直使用更简单的代码。

我永远不会使用第二个示例,因为初始化then赋值只是无缘无故占用了空间

我可能会做以下几点:

int length()  
{  
    const int str_length = strlen(arbitrary_string);  
    return str_length;  
}
这有两个原因:

  • 允许编译器执行指定的返回值优化;及
  • 您的返回值现在是自记录的,因为它有一个名称
  • 然而,这对我来说更多的是一个默认规则

    在这种具体的实际情况下:

  • 您的返回类型只有很少的
    int
    ,因此无论如何都不允许使用指定的返回值优化,即使是这样,也基本没有意义;及
  • 该函数已经很简单,并且命名适当
  • 因此,我将使用第一个示例:

    int length()  
    {  
        return strlen(arbitrary_string);
    }
    

    我永远不会支持你的第二个例子,因为初始化任务只是无缘无故占用了空间

    我可能会做以下几点:

    int length()  
    {  
        const int str_length = strlen(arbitrary_string);  
        return str_length;  
    }
    
    这有两个原因:

  • 允许编译器执行指定的返回值优化;及
  • 您的返回值现在是自记录的,因为它有一个名称
  • 然而,这对我来说更多的是一个默认规则

    在这种具体的实际情况下:

  • 您的返回类型只有很少的
    int
    ,因此无论如何都不允许使用指定的返回值优化,即使是这样,也基本没有意义;及
  • 该函数已经很简单,并且命名适当
  • 因此,我将使用第一个示例:

    int length()  
    {  
        return strlen(arbitrary_string);
    }
    

    我要说的是,始终遵循示例1。它读起来更漂亮。如果中间变量名有助于可读性,或者应该将表达式拆分为多个语句,我才不会将表达式放在return语句中

    不过,我绝不会建议使用示例2——初始化为0是毫无意义的。中间立场更好:

    int length()  
    {  
        int str_length = strlen(random_string);  
        return str_length;  
    }
    

    但是,很明显,
    str_length
    告诉您的内容并不比函数名
    strlen
    告诉您的内容多。

    我说,始终按照示例1执行。它读起来更漂亮。如果中间变量名有助于可读性,或者应该将表达式拆分为多个语句,我才不会将表达式放在return语句中

    不过,我绝不会建议使用示例2——初始化为0是毫无意义的。中间立场更好:

    int length()  
    {  
        int str_length = strlen(random_string);  
        return str_length;  
    }
    

    但是,很明显,
    stru length
    告诉您的内容并不比函数名
    strlen
    告诉您的内容多。

    在大多数情况下,可读性总是胜过性能。如果您有性能关键的代码,那么就关注性能。然而,这是一个例外,而不是规则


    始终追求可读性。

    在大多数情况下,可读性总是胜过性能。如果您有性能关键的代码,那么就关注性能。然而,这是一个例外,而不是规则


    始终追求可读性。

    一般来说,代码应该易于阅读并明确目的。在你的例子中,我更喜欢较短的版本。关于长版本的语义没有额外的信息增益


    一如既往,可能会有例外。特别是当返回值来自一个长而复杂的表达式时。然后,命名一些中间结果可能会有所帮助。

    一般来说,代码应该易于阅读,并明确目的。在你的例子中,我更喜欢较短的版本。关于长版本的语义没有额外的信息增益


    一如既往,可能会有例外。特别是当返回值来自一个长而复杂的表达式时。然后,命名一些中间结果可能会有所帮助。

    采用多步骤方法的一个原因是,如果您决定添加一行来打印长度值,那么麻烦就少多了:

    int length()
    {
        const int str_length = strlen(something);
        printf("str_length = %d\n", str_length);
        return str_length;
    }
    
    或者,如果要添加一些额外的断言:

    int length()
    {
        const int str_length = strlen(something);
        assert(str_length >= 0);
        return str_length;
    }
    

    除此之外,这一切都是关于您认为最合适的内容[当然,除非您有严格的编码标准要遵循!]

    采用多步骤方法的一个原因是,如果您决定添加一行来打印长度值,那么麻烦就会小得多:

    int length()
    {
        const int str_length = strlen(something);
        printf("str_length = %d\n", str_length);
        return str_length;
    }
    
    或者,如果要添加一些额外的断言:

    int length()
    {
        const int str_length = strlen(something);
        assert(str_length >= 0);
        return str_length;
    }
    

    除了这一点,它是关于你认为最合适的(除非你有严格的编码标准,当然!)/p> < p>回答这个问题时,总是选择更容易阅读的解决方案,这在每种编程语言中都很重要,但是在C++中,它是非常重要的。 对于您的特定问题,C++开发人员最容易阅读的是选项号1,它是干净和简单的。但是如果你不得不写的那一行是这样的:

    return (classA *)(function1(data1)->function2())->function3();
    
    在这种情况下,总是选择分割线,因为即使你知道它现在做什么,你也很难弄清楚未来会发生什么


    希望它有助于

    回答这个问题,总是选择更容易阅读的解决方案,这在每种编程语言中都很重要,但是在C++中。 对于您的特定问题,C++开发人员最容易阅读的是选项号1,它是干净和简单的。但是如果你不得不写的那一行是这样的:

    return (classA *)(function1(data1)->function2())->function3();
    
    在这种情况下,总是选择分割线,因为即使你知道它现在做什么,你也很难弄清楚未来会发生什么


    希望它对一个像样的编译器有所帮助,那应该不会有什么不同。选择一切