C++ 在C+中返回两个变量+;功能

C++ 在C+中返回两个变量+;功能,c++,C++,我想返回两个双变量:调用我创建的函数时。 根据一些教程(涉及C++的基础知识),我无法做到这一点 有什么方法可以做到这一点吗?您可以将对两个double的引用传递到一个函数中,在函数中设置它们的值 void setTwoDoubles(double& d1, double& d2) { d1 = 1.0; d2 = 2.0; } double d1, d2; setTwoDoubles(d1, d2); std::cout << "d1=" <

我想返回两个双变量:调用我创建的函数时。 根据一些教程(涉及C++的基础知识),我无法做到这一点


有什么方法可以做到这一点吗?

您可以将对两个double的引用传递到一个函数中,在函数中设置它们的值

void setTwoDoubles(double& d1, double& d2)
{
    d1 = 1.0;
    d2 = 2.0;
}

double d1, d2;
setTwoDoubles(d1, d2);
std::cout << "d1=" << d1 << ", d2=" << d2 << std::endl
void settwoduble(double&d1、double&d2)
{
d1=1.0;
d2=2.0;
}
双d1,d2;
SETTwouble(d1、d2);

std::cout例如,您可以使用。

您不能从一个函数返回两个值,但可以返回指向数组或包含两个双精度的其他结构的指针。

您可以编写一个包含变量并返回它的简单结构,或者使用
std::pair
std::tuple

#include <utility>

std::pair<double, double> foo()
{
  return std::make_pair(42., 3.14);
}

#include <iostream>
#include <tuple> // C++11, for std::tie
int main()
{
  std::pair<double, double> p = foo();
  std::cout << p.first << ", " << p.second << std::endl;

  // C++11: use std::tie to unpack into pre-existing variables
  double x, y;
  std::tie(x,y) = foo();
  std::cout << x << ", " << y << std::endl;

  // C++17: structured bindings
  auto [xx, yy] = foo(); // xx, yy are double
}
#包括
std::pair foo()
{
返回std::make_pair(42,3.14);
}
#包括
#包括//C++11,用于std::tie
int main()
{
std::pair p=foo();

std::cout从技术上讲,不,您不能以通常返回变量的方式返回两个变量。但是,您可以使用引用。这样,您可以将多个变量传递给函数,函数将分配它们,而不是返回任何内容:

void function(double & param1, double & param2) {
    param1 = 6.28;
    param2 = 3.14;
}
你会这样称呼它:

double var1, var2;
function(var1, var2);
不能直接执行此操作(因为返回值是单数的)。
但是,您可以在一个结构中放入一些值,然后返回它们(就像一对)

一种常见模式是通过引用返回输出变量:

ReturnVal Myfunction(/*in*/ BlahType _someParameters, /*out*/ ReturnType& _firstReturn, /*out*/ OtherReturnType& _secondReturn)
{
   _firstReturn = //someStuff
   _secondReturn = //someOtherStuff


return SUCCESS;
}

不,您不能返回两个变量,这两个变量需要作为引用方法使用

    #include <iostream>
using namespace std;

// function declaration
void swap(int &x, int &y);

int main ()
{
   // local variable declaration:
   int a = 100;
   int b = 200;

   cout << "Before swap, value of a :" << a << endl;
   cout << "Before swap, value of b :" << b << endl;

   /* calling a function to swap the values using variable reference.*/
   swap(a, b);

   cout << "After swap, value of a :" << a << endl;
   cout << "After swap, value of b :" << b << endl;

   return 0;
}


// function definition to swap the values.
void swap(int &x, int &y)
{
   int temp;
   temp = x; /* save the value at address x */
   x = y;    /* put y into x */
   y = temp; /* put x into y */

   return;
}
#包括
使用名称空间std;
//函数声明
无效掉期(整数和x,整数和y);
int main()
{
//局部变量声明:
INTA=100;
int b=200;

如果您使用的是C++11,我认为理想的方法是使用和

示例取自链接到的
std::tuple
第一页:

#include <tuple>
#include <iostream>
#include <string>
#include <stdexcept>

std::tuple<double, char, std::string> get_student(int id)
{
    if (id == 0) return std::make_tuple(3.8, 'A', "Lisa Simpson");
    if (id == 1) return std::make_tuple(2.9, 'C', "Milhouse Van Houten");
    if (id == 2) return std::make_tuple(1.7, 'D', "Ralph Wiggum");
    throw std::invalid_argument("id");
}

int main()
{
    auto student0 = get_student(0);
    std::cout << "ID: 0, "
              << "GPA: " << std::get<0>(student0) << ", "
              << "grade: " << std::get<1>(student0) << ", "
              << "name: " << std::get<2>(student0) << '\n';

    double gpa1;
    char grade1;
    std::string name1;
    std::tie(gpa1, grade1, name1) = get_student(1);
    std::cout << "ID: 1, "
              << "GPA: " << gpa1 << ", "
              << "grade: " << grade1 << ", "
              << "name: " << name1 << '\n';
}
#包括
#包括
#包括
#包括
std::tuple get_student(int-id)
{
if(id==0)返回std::make_tuple(3.8,'A',“Lisa Simpson”);
if(id==1)返回std::make_tuple(2.9,'C',“Milhouse Van Houten”);
if(id==2)返回std::make_tuple(1.7,'D',“Ralph Wiggum”);
抛出std::无效的_参数(“id”);
}
int main()
{
自动学生0=获取学生(0);

std::我看不出,如果有人(像我一样!)忘记了在C中如何做,诀窍是传递一个指向函数的指针并“返回”void。例如,一个函数接收两个double(x,y)并返回向量除以范数(x/d,y/d),其中d=sqrt(x²+y²):
void规范化(double-x1,double-x2,double*vector){double norm;norm=sqrt(x1*x1+x2*x2);vector[1]=x1/norm;vector[2]=x2/norm;}
也可能需要提及,它可以用于捕获两个单独的、预先存在的变量中的返回值。@BenjaminLindley很好的建议。添加了一个示例。现在您也可以执行
返回{42,3.14}这是更漂亮和更快的(避免了一对的构造,如果你有一个代码< TIE(x,y)< /COD>另一边,然后在C++ 11中,你可以使用<代码> TIG/<代码>直接分配给两个变量。嗨,我认为这个答案需要修改,因为C++ 11的新特性(和上面)类似<代码> STD::配对< /代码>。