gpt4 book ai didi

C++ 和二进制兼容性 : returning a POD struct by value

转载 作者:行者123 更新时间:2023-11-30 00:58:24 24 4
gpt4 key购买 nike

考虑以下 C++ 代码:

struct X
{
int a;
int b;
};

X foobar()
{
X x = { 1, 2 };
return x;
}

现在假设这段代码放在共享库中,供第三方应用程序使用。

我的问题是:如果我在 X 的末尾添加另一个成员(例如 int c),并在 foobar() 中初始化它>,调用 foobar() 的现有应用程序会中断吗?请注意,这是关于二进制兼容性,而不是源代码兼容性。

最佳答案

这完全取决于您的编译器选择做什么(更具体地说,平台 ABI 规定的内容)。

您可以想象,如果将返回值放在堆栈上,您现在向堆栈写入的内容会比调用者预期的多,这可能会导致在某些东西上加盖戳记。

一般来说,您不应依赖任何特定行为。您只需重新编译客户端应用程序。唯一现实的选择是像 PIMPL idiom 这样的东西。 .

关于C++ 和二进制兼容性 : returning a POD struct by value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6282074/

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