gpt4 book ai didi

c++ - 为什么函数的多重定义是错误的?

转载 作者:太空狗 更新时间:2023-10-29 23:50:19 24 4
gpt4 key购买 nike

一个例子:

//a.h
// no include guards
class A {};

如果我在一个翻译单元(一个 cpp 文件)中两次包含此 header ,我会收到链接器错误,这没关系。但如果我将它包含在 2 个不同的翻译单元中也可以,对吧?

现在考虑一个全局函数:

// b.h
// no include guards
void foo() {}

不仅不允许在同一个单元中两次包含它,而且也不允许在任何其他翻译单元中第二次包含它。为什么?

最佳答案

If I'll include this header twice in one translation unit (one cpp file) I'll get a linker error

我相信您遇到的是编译错误,而不是链接器错误。我看不到应该生成的代码,因此链接器看不到它可以提示的任何内容。

void foo{}

我相信你的意思是 void foo(){}!

C++使用“一次定义规则”。这只是一个定义,从用户的角度来看,两次获得定义是没有意义的,可能具有不同的语义。这就是语言,它是一种在一个程序中摆脱多个不同定义的简单方法。

发起人为什么决定使用ODR,这里不能给出。也许 Bjarne 读到这里可以给你一个更详细的答案:-)

关于c++ - 为什么函数的多重定义是错误的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32121168/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com