0

例1:

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

例2:

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

質問:
1行のコードでその関数の要件を満たすことができる多くの関数に出くわしましたが、この種のショートカットを回避することについて何かを思い出します。

ある状況が別の状況よりも適切である特定の状況がありますか、それとも私は常により単純なコードを選択する必要がありますか。

4

6 に答える 6

2

初期化後の割り当ては理由もなくスペースを占有しているだけなので、2番目の例には決して行きません。

がするかもしれないことは次のとおりです:

int length()  
{  
    const int str_length = strlen(arbitrary_string);  
    return str_length;  
}

これには2つの理由があります。

  1. コンパイラが名前付き戻り値の最適化を実行できるようにします。と
  2. 名前を付けることで、戻り値が自己文書化されます。

しかし、それは私にとってはデフォルトのルールです。

この特定の実際のケースでは:

  1. リターンタイプはごくわずかintであるため、名前付きリターン値の最適化はとにかく許可されておらず、許可されていたとしてもほとんど意味がありません。と
  2. この関数はすでに簡単で、適切な名前が付けられています。

したがって、最初の例を使用します。

int length()  
{  
    return strlen(arbitrary_string);
}
于 2013-02-05T18:52:28.857 に答える
1

私はいつも例1で行くと言います。それははるかによく読みます。中間変数名が読みやすさを向上させる場合、または式を複数のステートメントに分割する必要がある場合にのみ、式をreturnステートメントに入れません。

例2を提案することは決してありませんが、0への初期化は無意味です。妥協点はより良いです:

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

str_lengthただし、関数名が示す以上のことはわかりませんstrlen

于 2013-02-05T18:52:32.883 に答える
1

マルチステップアプローチを使用する理由の1つは、長さの値を出力するために行を追加することにした場合、面倒がはるかに少ないことです。

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;
}

それ以外は、あなたが最も適切だと感じるものがすべてです[もちろん、従うべき厳格なコーディング標準がない限り!]

于 2013-02-05T18:57:06.827 に答える
0

一般に、コードは読みやすく、目的を明確にする必要があります。あなたの例では、私はより短いバージョンを好みます。長いバージョンでは、セマンティクスに関する追加情報はありません。

いつものように、例外があるかもしれません。特に、戻り値が長くて複雑な式から生じる場合。次に、中間結果のいくつかに名前を付けると役立つ場合があります。

于 2013-02-05T18:53:26.357 に答える
0

この質問に答えるには、常に読みやすいソリューションを選択してください。これはすべてのプログラミング言語で重要ですが、C++では非常に重要です。

あなたの特定の質問については、C ++開発者にとって最も読みやすいのはオプション番号1であり、それはクリーンでシンプルです。しかし、あなたが書かなければならない単一の行が次のようになっている場合:

return (classA *)(function1(data1)->function2())->function3();

この場合、常に線を分割することを選択します。これは、現在何が行われているのかを理解していても、将来そこで何が起こっているのかを理解するのに苦労する可能性があるためです。

それが役に立てば幸い

于 2013-02-05T18:58:28.533 に答える
-1

ほとんどの場合、読みやすさは常にパフォーマンスよりも優先されます。パフォーマンスが重要なコードを使用している場合は、パフォーマンスを重視してください。ただし、これは規則ではなく例外です。

常に読みやすさを追求してください。

于 2013-02-05T18:52:40.870 に答える