用c ++编程基本的东西

时间:2012-11-26 16:59:25

标签: c++ function return

我有一个简单的问题,因为我不能正确理解这个功能。 拥有这样的代码:

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

我想命名接口,输入和输出,并将函数体放入'blackbox'。输入是函数的参数,我是否正确?然后输出是整数数组 arg1 ,整数 arg2 ,是吗?如果是这样,输出如何输出,或者如果我错了怎么识别? 此外,如果 B 为真,在返回点会发生什么? function1 什么都不返回?如果是这样,为什么不是无效类型? 对不起有点混乱和这样有趣的例子,但多亏了我能够理解这个概念。

2 个答案:

答案 0 :(得分:3)

这段代码实际上是无效的C ++:

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

它无效,因为函数参数必须具有类型,并且ab没有指定类型。这是有效的:

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

如果要设计一个可以接受未指定类型参数的函数,可以使用模板:

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

这适用于任何类型(例如int),只要该类型与operator*一起使用时与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");
}

但是,考虑到这个问题的背景,我怀疑这是你正在寻找什么,你应该考虑将异常作为一个高级主题。这些不是你正在寻找的机器人。

答案 1 :(得分:0)

如果B为true,则函数在填充输出数组之前返回,但是仍然需要返回某些,因为该函数具有“int”返回类型。

至于参数是输入参数还是输出参数,这取决于您。但是,C ++中的约定是输入参数是const(如果它们是指针或引用),如果它们是输出参数,则为非const:

int function1(const int* arg1, int* arg2) // arg1 is an in param, arg2 is an out param