在C ++中使用卷曲箭头的正确方法是什么?

问题描述

for(int i = 10 ; b >= i;i++){
        if(i%2 == 0)
            cout << "even" << endl;
        else
            cout << "odd" << endl;
        
    }

for(int i = 10 ; b >= i;i++){
        if(i%2 == 0){
            cout << "even" << endl;
        }else{
            cout << "odd" << endl;
        }
    }

这两个代码的唯一区别在于if else语句的花括号,只是想知道何时使用花括号,何时不使用花括号?


解决方法

它们被称为braces or curly brackets,不要与~>在某些语言中的“卷曲箭头”相混淆。

在C和继承C ++中,它们在单行if语句上是可选的,但是由于省略了许多错误,因此建议您原则上使用它们即使它们是多余的。

像这样的错误很容易忽略:

if ((err = SSLHashSHA1.update(&hashCtx,&signedParams)) != 0)
    goto fail;
    goto fail;

goto似乎是有条件的,但不是,它只是掉线了。这是巨大的OpenSSL bug,令所有人感到惊讶,如果资深的开发人员可以将其弄乱,您也可以。

第二种形式是最可靠,最不明确的形式,尤其是按照典型惯例进行格式化时:

for (int i = 10 ; b >= i;i++) {
    if (i%2 == 0) {
        cout << "even" << endl;
    }
    else {
        cout << "odd" << endl;
    }
}

for是语句,而不是函数,因此语法为for (...),带有空格。函数没有空格,例如f(...)。省略空格意味着for是一个函数,而绝对不是。 ifwhile等也是如此。

值得注意的是,原始代码实际上可以简化为:

for (int i = 10 ; b >= i;i++)
    if (i%2 == 0)
        cout << "even" << endl;
    else
        cout << "odd" << endl;
    

由于if是单个语句,即使附加了else子句。

同样,不建议这样做,因为关于一条语句和不一条语句的规则可能会造成混淆。

,

如果'if','else'或'for'结构内部只有一个语句,则可以决定不使用大括号。但是,我建议使用它们以提高代码的可读性。

,

Google提供了详细的C++ style guide,可以为您提供帮助。特别是说

通常,单行语句不需要花括号,但是如果您愿意,可以使用花括号;带有复杂条件或语句的条件或循环语句使用花括号可能更易读。有些项目要求if必须始终带有大括号。