我不知道';我不明白是什么';s返回 我最近开始学习C++,到目前为止我做得很好,直到我来了。 函数声明和调用。 我不太清楚的是return的用途以及为什么每个函数都需要它

我不知道';我不明白是什么';s返回 我最近开始学习C++,到目前为止我做得很好,直到我来了。 函数声明和调用。 我不太清楚的是return的用途以及为什么每个函数都需要它,c++,C++,另外,为什么需要函数类型?比如说 int xamplefunc(){} int类型是什么 编辑:嗯,我不确定我是否得到了它。return到底做什么?窗帘后面到底发生了什么?调用函数是否将返回值存储为变量,或者是什么?您所称的函数“类型”是函数的返回类型。这意味着对函数的调用将返回该类型的对象。return语句是函数进行返回的地方 int random() { return 4; } 此函数返回一个int。您可以调用它为int赋值: int n = random(); 返回类型为int的

另外,为什么需要函数类型?比如说

int xamplefunc(){}
int类型是什么


编辑:嗯,我不确定我是否得到了它。return到底做什么?窗帘后面到底发生了什么?调用函数是否将返回值存储为变量,或者是什么?

您所称的函数“类型”是函数的返回类型。这意味着对函数的调用将返回该类型的对象。return语句是函数进行返回的地方

int random() {
  return 4;
}
此函数返回一个
int
。您可以调用它为int赋值:

int n = random();
返回类型为
int
的值但不接收任何内容的函数。此代码不正确,因为没有返回,如果没有编译错误,将返回一些垃圾。

类似于

return_type  function_name(parameter list)
  {    
     //body of the function     
  } 
返回类型指定函数返回的数据类型。返回类型可以为void,这意味着函数不返回任何数据类型。函数名是函数的名称。函数名应以字母或下划线开头。参数列表由逗号分隔的变量及其数据类型组成。参数列表可能为空,这意味着函数不包含任何参数。参数列表应包含变量的数据类型和名称

比如说,

 int factorial(int n, float j)
读得好


正如@DeadMg在执行某些操作后所做的那样,通常需要将计算出的新值返回给函数调用方。 假设我想添加两个数字&将加法返回给调用者,那么我可以将函数编写为

int add(int x,int y)
{
return X+y;
}
这里的return语句告诉我们,u r返回int值。
如果您不想返回任何内容,那么只需使用返回类型void,如下所示

void add(int x,int y)
{
//some statements;
}

函数类型被恰当地称为返回类型。之所以这样叫它,是因为它返回了示例中指定的类型

     int xamplefunc(){}
一个整数将返回给您

有关详细说明,请查看以下链接
你有一个银行系统。您想让用户请求他们的余额。您实现了一个getCurrentBalance方法。在方法体中计算余额后,需要返回类型来返回余额。您还需要一个输入参数,他们的帐号可能是:

double getCurrentBalance (int AccountNo)
{
   double balance = //Check balance for AccountNo in Database or whereever
   return balance; 
}
请不要看太多我用过的类型。我知道现在双倍不是最好的

return balance; 

必须与我们的退货类型相匹配,即双倍。但是,您可以返回隐式转换为double的内容。如果愿意,您可以返回int balance(当然会失去精度)。

当您调用函数时,有时您希望返回一些内容,例如,您可以调用一个进行简单计算(2x2)的函数,然后您需要答案。 如果没有办法回答,你需要采取各种变通办法

你所谓的“函数类型”实际上是你期望从函数中得到的答案的类型。在本例中,您希望函数返回int类型的值(例如数字)

如果xamplefunc的定义如下:

int xamplefunc(){
    return 2*2;
}

调用函数时,您希望返回4。

编译器必须知道
返回类型
,才能知道给定类型变量的
位大小,哪些
寄存器
最适合,用于
推断要读写的内存地址
,以及
地址间隔
,以实现最佳分配

函数不能返回值(void)。如果它确实返回值,则该值必须可由函数的调用方获取

被调用函数将其返回值放在调用方函数已知且调用方函数必须能够访问的位置。在执行
ret
指令之前,将返回值放入内存:

比如说。鉴于以下功能:

int xamplefunc(int x, int y)
{
   return x + y;
}
它将通过MSVC编译器在x86机器上组装,以:

:_xamplefunc@8
push ebp
mov ebp, esp
mov eax, [ebp + 8]
mov edx, [ebp + 12]
add eax, edx
pop ebp
ret 8
或通过x86机器上的:

define i32 @xamplefunc(i32 %x, i32 %y) nounwind uwtable readnone {
  %1 = add nsw i32 %y, %x
  ret i32 %1
}
注意:使用的顺序和寄存器可能因编译器和版本而异,这是软件取证中的一个有用属性


某些语言(如Coffeescript)也通过返回函数声明中最后一个声明的值来提供隐式返回。

也许这有助于您记住函数在数学中的定义:函数f(x)接受一个参数x并返回一个可以从x计算的值。例如,函数sin取一个实数并返回另一个实数,即该数的正弦

C++函数就是这样的模型。因此,在定义函数时,必须告诉编译器函数所取的类型(这是括号中的参数列表)和返回的值类型(这是返回类型),你称之为“函数类型”,请注意,在C++中,“函数类型”一词用于不同的事物。 当你想写一个C++中的正弦函数时,你可以这样做:

double sin(double x)
{
  // code to calculate the sine of x
}

但是现在你又遇到了另一个问题:不像在数学中你通常把函数写为一个表达式,在C++中你会写一些语句列表来执行。该语句列表通常会操纵许多值。那么,如何告诉编译器哪个值实际上应该作为x的正弦值返回呢

答案是
return
语句。因此,您的函数可能如下所示:

double sin(double x)
{
  double result = 0;
  // code to modify result so finally it contains the sine of x
  return result;
}
但是,请注意,
return
不仅告诉编译器“这是
double sin(double x)
{
  double result = 0;
  // code to modify result so finally it contains the sine of x
  return result;
}
double sin(double x)
{
  if (is_bad(x))
    return getnan(); // when this is executed, the function *immediately* returns
  // if we get here, we therefore know the value x is a regular number
  double result;
  // calculate the sine
  return result;
}
void say_hello()
{
  std::cout << "Hello!\n";
}
void say_hello(std::string to_whom)
{
  if (to_whom = "satan")
    return; // I don't say hello to satan!
  std::cout << "Hello " << to_whom << "!\n";
}
int main()
{
  return EXIT_SUCCESS; // I've succeeded in doing nothing!
}
int main()
{
  return EXIT_FAILURE; // I have no idea what I was supposed to do,
                       // so I couldn't do it :-)
}