gpt4 book ai didi

C++ 重新声明不一致/有趣

转载 作者:行者123 更新时间:2023-11-28 04:46:19 25 4
gpt4 key购买 nike

我在回答 this question当我想到这个例子时:

#include <iostream>

void func(int i);
void func();

int main (){
func();
return 0;
}
void func(){}

在上面的例子中,代码编译正常。但是,在下面的示例中,代码无法正确编译:

#include <iostream>

void func();
int func();

int main (){
func();
return 0;
}
void func(){}

这是编译这段代码时出现的错误(在clang++中):

file.cpp:4:5: error: functions that differ only in their return type cannot be
overloaded
int func();

我预计两次都会出现这样的错误。

我稍微修改了一下代码,出于某种完全奇怪的原因,链接器似乎完全忽略了不正确的声明。现在这允许一些非常奇怪的代码。例如这个头文件是合法的:

#ifndef EXAMPLE
#define EXAMPLE
void func();
void func(int a);
void func(int b);
void func(int a, int b);
void func(int a, short b);
void func(int w);
void func(short b);
#endif

为什么?为什么这个世界上的任何一个都有效?这只是 C++ 标准的失败吗?编译失败? “特征”?实际功能? (顺便说一下,这是一个问题。)

附言在等待答案的同时,我将在这里利用它在代码中预添加可能最终会投入生产的功能。

最佳答案

首先是函数重载,不考虑参数名称(参数类型或数量不同)。

第二个是函数重声明(参数类型和计数相同),改变返回类型是被禁止的。不允许仅重载返回类型。编译器告诉你的。

关于C++ 重新声明不一致/有趣,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49205371/

25 4 0
文章推荐: javascript - 圆 Angular 并突出显示所选的一个
文章推荐: html - 在 HTML/CSS 中调整表格单元格的图像大小
文章推荐: javascript - 流式传输通过 Websocket 接收的大数据文件作为下载
文章推荐: css - 如何使
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com