簡體   English   中英

C++ 和二進制兼容性:按值返回 POD 結構

[英]C++ and binary compatibility: returning a POD struct by value

考慮以下 C++ 代碼:

struct X
{
        int a;
        int b;
};

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

現在假設這段代碼被放在一個共享庫中,供第三方應用程序使用。

我的問題是:如果我在X的末尾添加另一個成員(例如int c ),並在foobar()中對其進行初始化,調用foobar()的現有應用程序會中斷嗎? 請注意,這是關於二進制兼容性,而不是源代碼兼容性。

這完全取決於您的編譯器選擇做什么(更具體地說,平台 ABI 規定的內容)。

您可以想象,如果將返回值放在堆棧上,那么您現在在堆棧上寫入的內容將比調用者預期的要多,這可能會導致在某些東西上加蓋印記。

一般來說,你不應該依賴任何特定的行為。 您只需重新編譯客戶端應用程序。 唯一現實的選擇是像PIMPL idiom之類的東西。

由於 X 的大小會改變,是的。 Arrays 等取決於尺寸。 您可能會得到“幸運”,並且填充可能允許舊應用程序使用較新的庫,但這純粹是運氣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM