我有一个简单的问题,因为我不能正确理解这个功能。 拥有这样的代码:
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 什么都不返回?如果是这样,为什么不是无效类型? 对不起有点混乱和这样有趣的例子,但多亏了我能够理解这个概念。
答案 0 :(得分: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*
一起使用时与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