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为真,在返回点会发生什么?函数1什么都不返回吗?如果是这样,为什么不是 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;
}

这适用于任何类型(例如int),只要该类型在与operator*as with a*b.. 一起使用时有意义。例如,std::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 为真,则函数在输出数组被填充之前返回,但您仍然需要返回一些内容,因为该函数具有“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 回答