0

function two way を使用して 2 つの数値を加算する単純な関数を作成できます。1 つは void 出力関数シグネチャを使用し、もう 1 つは int 出力関数シグネチャを使用します。最初のものは、プログラマーによってより一般的に使用されていることに気付きました。

これが最初のコードです

#include<iostream>
void add(int x, int y, int* z)
{
  z[0] = x + y;
}
int main()
{
  int a = 5;
  int b = 10;
  int c = 0;
  add(a, b, &c);
  return 0;
}

これが2番目のコードです

#include<iostream>
int add(int x, int y)
{
  int z;
  z = x + y;
  return z;
}
int main()
{
  int a = 5;
  int b = 10;
  int c;
  c = add(a, b);
  return 0;
}

gcc を使用してコードをコンパイルし、objdumpを使用してシンボルを見たとき。2つの非常にわずかな違いに気付きました。実際、 LEAMOVの実行サイクル数が同じであると仮定すると、2 番目のコードの命令は 1 つ少なくなります。コーディングの最初のスタイルと 2 番目のスタイルを使用する利点はありますか? ひょっとしたら、その逆かもしれません。

この質問についてstackexchangeを検索し、これを見つけました(Void vs Int Functions)が、これは説明しません。

4

2 に答える 2

1

最初のスタイルは、ほとんどの場合、(コピー操作が高価な)重いオブジェクトに使用され、(N)RVO を使用しないコンパイラーを使用して、深いオブジェクトのコピーを回避するのに役立ちます。

実際、あなたが言われたように、C++ プログラマーは 2 番目のスタイルを好みます。それは、自然に見える (そして動作する) からです。

C++11 と可動オブジェクトでは、最初のスタイルの必要性がほぼゼロになるため、ほとんどすべての関数を自然な方法で記述できます。

于 2013-08-07T02:52:40.277 に答える