C++ 返回C+中的多个值和默认参数+;

C++ 返回C+中的多个值和默认参数+;,c++,C++,我试图创建一个函数,它接受1个或3个参数,并返回1个或3个值(基于传递的参数) 如果传递了1个参数,则函数将使用其他2个参数的默认值。 如果传递了3个参数,那么它将使用这些值 bool foo( bool x, int &y = 0, int &z = 0) { x = true; y = y + 1; z = z + 2; return x; } 这是C++中可能的还是我与java函数混淆的?< /p> 任何函数总是返回只有1个值< /强>。无法直接返回2个或多个值 间

我试图创建一个函数,它接受1个或3个参数,并返回1个或3个值(基于传递的参数)

如果传递了1个参数,则函数将使用其他2个参数的默认值。 如果传递了3个参数,那么它将使用这些值

bool foo( bool x, int &y = 0, int &z = 0) {

x = true; y = y + 1; z = z + 2;

return x;

}

这是C++中可能的还是我与java函数混淆的?< /p> 任何函数总是返回<强>只有1个值< /强>。无法直接返回2个或多个值


间接地,当您通过引用传递参数时会发生这种情况。由于两个参数
&y
&z
是通过引用传递的,因此对它们的更改可以直接反映出来。

您可以通过引用传递来实现这一点

通过这样做,您正在创建一个指向内存位置的方法。 当内存位置改变时,您的值也随之改变

链接
你不能这样做。但是,您可以使用不同数量的参数重载该函数,并可能返回带有结果的
std::vector
std::list

编辑

更复杂的是,可以使用元组:

typedef boost::tuple<bool,int,int> my_data_t;
my_data_t my_tuple(true, 1, 0);

然后,在函数外,您将看到
my\u tuple.get()
(对应于
y
)为2(1+1)。

您可以使用两个函数来完成:

bool foo( bool x, int &y, int &z) {
    x = true; // this isn't really what it does, is it?
    y = y + 1; z = z + 2;
    return x;
}

bool foo(bool x)
{
    int a = 0, b = 0;
    return foo(x,a,b);
}

我不确定您想做什么,但是您可以使用
boost::tuple
返回不同类型的多个值

boost::tuple<bool, int, int> foo( bool x, int y = 0, int z = 0) {

    x = true; y = y + 1; z = z + 2;

    return boost::make_tuple(x, y, z);

}

int main() {
    boost::tuple<bool, int, int> result = foo(x, 1, 2);

    std::cout << boost::get<0>(result) << boost::get<1>(result) << boost::get<2>(result);
}
boost::元组foo(boolx,inty=0,intz=0){
x=true;y=y+1;z=z+2;
返回boost::生成tuple(x,y,z);
}
int main(){
tuple result=foo(x,1,2);

std::对于非常量引用是不可能的。单参数版本有什么意义?您将如何在Java中实现它?只是出于好奇,我认为您不能在Java中真正实现它,所以在这方面应该不会有任何混淆…在Java中,可以轻松地做的就是使它成为静态的,并且在任何时候被引用。然后它会改变GES,但是在C++中,你可以通过引用来做。这是没用的。<代码> A<代码>和代码> b/COD>是无效的,因为它是重载函数的局部。@纳瓦兹:我假设他的函数做的比他所显示的更复杂,他不想复制那个功能。在这种情况下,你是正确的,A和B是无用的。ey只是允许从第二个版本调用第一个版本的伪值。
bool foo( bool x, int &y, int &z) {
    x = true; // this isn't really what it does, is it?
    y = y + 1; z = z + 2;
    return x;
}

bool foo(bool x)
{
    int a = 0, b = 0;
    return foo(x,a,b);
}
boost::tuple<bool, int, int> foo( bool x, int y = 0, int z = 0) {

    x = true; y = y + 1; z = z + 2;

    return boost::make_tuple(x, y, z);

}

int main() {
    boost::tuple<bool, int, int> result = foo(x, 1, 2);

    std::cout << boost::get<0>(result) << boost::get<1>(result) << boost::get<2>(result);
}