繁体   English   中英

C ++中声明和定义中的不同类型

[英]Differing types in declaration and definition in C++

我正在看一段代码,发现了一件奇怪的事情。 函数声明如下:

void func(int, int*);

但后来被定义为

void func(int a, int &p) { ... }

代码在Linux下的gcc中正确编译。 怎么可能呢?(它已被构建为C文件)

#include<iostream>
#include<string>

// overloads, nothing to do with func(int, int&)
int func(int, int*);
int func(int, short);
int func(int, std::string);

int func(int a, int& b) {
    return a;
}

int main() {
  int x;
  std::cout << func(4, x) << std::endl;

  return 0;
}

也就是说,采用不同参数的函数是完全不同的函数(即使它们具有相同的名称)。 这些功能据说具有不同的签名

定义和声明分别引用不同的函数。 更具体地说,是相同功能名称的不同重载。

这个:

void func(int, int*);

声明一个带有intint*的函数。

这个:

void func(int a, int &p) { ... }

声明并定义一个采用intint&的函数。 它们是不同的功能。 看到两者的调用代码将照常基于过载解析调用适当的代码。

我不清楚您的问题,但我想您对参数b / w函数调用和函数定义(尤其是指针)的映射感到困惑。 使用锁和钥匙的概念来理解指针。 假设p是一个指针变量。 &p是它的地址。

现在假设&正在充当锁。 您想访问值p指向的位置,因此您需要一个密钥。现在,我给您*键来打开&锁定。 因此*(&p)将为您提供存储在地址p指向的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM