[英]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*);
声明一个带有int
和int*
的函数。
这个:
void func(int a, int &p) { ... }
声明并定义一个采用int
和int&
的函数。 它们是不同的功能。 看到两者的调用代码将照常基于过载解析调用适当的代码。
我不清楚您的问题,但我想您对参数b / w函数调用和函数定义(尤其是指针)的映射感到困惑。 使用锁和钥匙的概念来理解指针。 假设p是一个指针变量。 &p是它的地址。
现在假设&正在充当锁。 您想访问值p指向的位置,因此您需要一个密钥。现在,我给您*键来打开&锁定。 因此*(&p)将为您提供存储在地址p指向的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.