声明和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*);
声明一个采用int
和int*
的函数。
这:
void func(int a, int &p) { ... }
声明并定义一个采用int
和int&
的函数。它们是不同的功能。调用同时看到两者的代码将根据重载解析正常调用适当的代码。
我看不清楚你的问题,但我想你在参数黑白函数调用和函数定义的映射中感到困惑,尤其是指针。使用锁和钥匙概念来理解指针。假设 p 是一个指针变量。&p是它的地址。
现在假设 & 正在充当锁。你想访问的值p指向,所以需要一个键。现在我给你*钥匙打开你的和锁。因此,*(&p) 会给你存储在地址 p 指向的值。
相关文章:
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- 强枚举类型定义:Clang Bug 还是 C++11 标准不确定性?
- 列表参数的类型定义
- 使用模板化的键类型定义 std::map,该键类型基于作为参数接收的函数
- 关于 C++ 中的函数类型定义
- C++(和 ROS) - 包含与前向声明引用,设置默认值和类型定义
- 将使用/类型定义限制为类范围
- 模板类型定义?
- C++:模板类的类型定义
- 如何对命名空间限定类型进行类型定义?
- 此递归模板类型定义是否有效C++?
- 具有调整对齐方式的类型定义
- C++从抽象类型定义类成员
- 用于C++代码的 API 监视器类型定义 (XML)
- 如何将result_of与函数类型定义一起使用
- 在C++的适当类型定义位置
- 如何根据模板类型定义浮点常量?
- 如何为缺少预定义运算符而不扩展命名空间"std"的标准类型定义运算符>> (istream &, ...)?
- 参数化类的别名(或类型定义)内部类
- 如果我想从类型"T"定义元素的容器(来自 STL),那么"T"必须使用默认构造函数?