0

機能を正しく理解していないので、簡単な質問があります。そのようなコードを持つ:

int function(a, b)
{
 return a*b;
}

a と b が int の場合、結果が返されることは明らかです。ただし、次のようなものがあります:

int function1(arg1, arg2)
{
 //something
 if (B)
 {
  //do something
  return;
  }
 arg1[0] = variable1;
 arg1[1] = variable2;
 arg2 = variable3;
 return;
}

インターフェイスに名前を付けたいので、入力と出力を指定し、関数本体を「ブラックボックス」に入れます。入力は関数の引数です。正しいですか? 出力は整数配列arg1と整数arg2ですよね?もしそうなら、どのように入力を出力することができますか、または私が間違っている場合、それを識別する方法は? また、リターンポイントでBが true の場合はどうなりますか? function1は何も返しませんか? もしそうなら、なぜvoid型ではないのですか? 少しごちゃごちゃしていて面白い例で申し訳ありませんが、そのおかげで概念を理解できるようになります。

4

2 に答える 2

3

このコードは実際には無効な C++ です。

int function(a, b)
{
 return a*b;
}

関数パラメーターには型が必要であり、型が指定されていないaため、無効です。bこれは有効です:

int function(int a, int b)
{
 return a*b;
}

指定されていない型のパラメーターを受け入れることができる関数を設計したい場合は、そのためのテンプレートを使用できます。

template<class Val>  Val function(Val a, Val b)
{
  return a*b;
}

これは、 as と一緒intに使用したときにその型が意味をなす限り、任意の型 ( など) で機能します。たとえば、は機能しません。operator*a*bstd::string

C++ では、型を返すように宣言されているすべての関数は、すべての戻り点でその型を返す必要があります。これにより、このコードも無効になります。

int function1(arg1, arg2)
{
 //something
 if (B)
 {
  //do something
  return;
  }
 arg1[0] = variable1;
 arg1[1] = variable2;
 arg2 = variable3;
 return;
}

voidを返すように宣言された関数から戻ることはできませんint。何かを返すように宣言された関数から「エスケープ」する必要がある場合は、例外をスローできます。

int function1(arg1, arg2)
{
 //something
 if (B)
 {
  //do something
  throw std::runtime_error("whoops");
  }
 arg1[0] = variable1;
 arg1[1] = variable2;
 arg2 = variable3;
 throw std::runtime_error("whoops 2");
}

ただし、この質問のコンテキストを考えると、これはあなたが探しているものではないと思われます。今のところ、例外は高度なトピックであると考える必要があります。これらはあなたが探しているドロイドではありません。

于 2012-11-26T17:07:20.047 に答える
0

B が true の場合、関数は出力配列が満たされる前に戻りますが、関数の戻り値の型が「int」であるため、何かを返す必要があります。

パラメータが入力パラメータか出力パラメータかは、あなた次第です。ただし、C++ の規則では、入力パラメーターは const (ポインターまたは参照の場合) であり、出力パラメーターの場合は非 const です。

int function1(const int* arg1, int* arg2) // arg1 is an in param, arg2 is an out param
于 2012-11-26T17:08:58.733 に答える