gpt4 book ai didi

c++ - C++ 中的链接器正在接受具有相同参数和不同返回类型的函数,但我得到 SEGFAULT

转载 作者:太空狗 更新时间:2023-10-29 20:33:27 26 4
gpt4 key购买 nike

假设我们有一个 hpp 和 cpp 文件,声明和实现具有相同名称/参数但返回类型不同的相同函数。 cpp 省略了包含 hpp。所以编译器没问题,链接器不会引发任何错误。

hpp声明函数如下:

std::string myFunction(int *);

cpp 省略包含 hpp 并实现函数但具有不同的返回类型:

const std::string& myFunction(int *address) {...}

然后,当客户端代码包含 hpp 并使用该函数并执行代码时,该函数接收到的地址值不是发送的地址值,我得到一个 SEGFAULT。实际上,在调试时,我得到的地址参数值与我发送的值不同。

我明白这是一个错误,因为这段代码显然是不正确的:我应该使用相同的返回类型并帮助编译器警告我返回类型实际上是不同的。

我还是想了解是什么在运行时造成了这个问题?对我来说,这与参数在堆栈中的预期位置或类似的东西有关。但是正式的解释对于更好地理解 C++ 的工作原理会很有趣。

最佳答案

根据标准,您的程序格式错误。关于“程序和链接”的部分处理了这个问题:

6.5 Program and linkage [basic.link]
...

10. After all adjustments of types (during which typedefs are replaced by their definitions), the types specified by all declarations referring to a given variable or function shall be identical, except that declarations for an array object can specify array types that differ by the presence or absence of a major array bound. A violation of this rule on type identity does not require a diagnostic.

引文的最后一句话指出编译器不需要对此进行诊断。因此,即使您正确地包含了头文件,编译器也可能不会报错。

关于c++ - C++ 中的链接器正在接受具有相同参数和不同返回类型的函数,但我得到 SEGFAULT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55059094/

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