C+;中包含函数定义的内容+;? 我想我从CPLUS PLSUS和MSDN得到了关于C++中函数定义的确切信息。

C+;中包含函数定义的内容+;? 我想我从CPLUS PLSUS和MSDN得到了关于C++中函数定义的确切信息。,c++,terminology,C++,Terminology,: 该函数可以从中的任意位置调用 节目。传递给函数的值是参数, 其类型必须与中的参数类型兼容 函数定义 鉴于,函数的定义是隐含函数体(或返回表达式/值): 重载函数可能具有相同的定义。例如: 谷歌搜索“函数定义c++”可以得到很多函数的定义,我不关心这些定义 那么,函数的哪些组成部分构成了它的定义呢?让我们直接了解一些术语: 函数声明:也称为函数原型。它是函数签名和名称,没有函数体。相反,它后面跟一个分号 函数定义:函数声明(不带分号),后跟一段用大括号括起来的代码,称为函数体 函数签名:函数

:

该函数可以从中的任意位置调用 节目。传递给函数的值是参数, 其类型必须与中的参数类型兼容 函数定义

鉴于,函数的定义是隐含函数体(或返回表达式/值):

重载函数可能具有相同的定义。例如:

谷歌搜索“函数定义c++”可以得到很多函数的定义,我不关心这些定义


那么,函数的哪些组成部分构成了它的定义呢?

让我们直接了解一些术语:

  • 函数声明:也称为函数原型。它是函数签名和名称,没有函数体。相反,它后面跟一个分号
  • 函数定义:函数声明(不带分号),后跟一段用大括号括起来的代码,称为函数体
  • 函数签名:函数的返回类型和参数类型。这几乎就是除去名称之外的函数原型
  • 函数体:将要执行的实际代码,以括号括起的代码块的形式
  • 函数名:函数原型中不是签名或分号的位。它用于调用函数
一些例子:

// declaration/prototype
void  // return type
f     // function name
(int) // function parameter list
;     // semicolon
// definition
int g(double) // prototype part of the definition
{ return 42; } // the body, which really "defines" the function
// signature - in between the template's angle brackets < >
std::function<
              int(double)     // this bit is what one would call the signature
                         > h;

尽管函数体看起来相同,但它们表示不同的基本行为:在整数情况下,
+
表示整数加法,在后一种情况下,表示浮点加法。这是两个不同的(内置)操作符。总而言之,这只是一个令人困惑的例子。

“那么,函数的哪些组件构成了它的定义?”所有部分,签名和正文。定义。您可能对术语声明感到困惑。@πάνταῥεῖ 我知道定义和声明。我只是不明白CPluPlus的示例函数如何具有相同的定义。如果参数类型特定于函数的定义,那么这不是两个不同的函数定义吗。我推荐en.cppreference.com,我认为cpluplus在这里太草率了,这意味着一个函数的不同重载可以具有相同的主体。@Galik:不同之处在于cppreference.com是一个wiki,您可以修复您发现的错误(我真希望您这样做了)。它还更清楚地概述了某些库函数的具体功能,这在cplusplus.com上通常很难找到。
int sum (int a, int b)
{
  return a+b;
}

double sum (double a, double b)
{
  return a+b;
}
// declaration/prototype
void  // return type
f     // function name
(int) // function parameter list
;     // semicolon
// definition
int g(double) // prototype part of the definition
{ return 42; } // the body, which really "defines" the function
// signature - in between the template's angle brackets < >
std::function<
              int(double)     // this bit is what one would call the signature
                         > h;
int sum(int a, int b)          { return a+b; }
double sum(double a, double b) { return a+b; }