我有一個關於二進制兼容性的問題。我有類A,它包含一個公共方法foo()和一個屬性字符串_foo;二進制兼容關於更改返回類型C++
const string foo() {return _foo;}
當我改變
const string& foo(){return _foo;}
這還算是二進制兼容的?謝謝你的幫助!
我有一個關於二進制兼容性的問題。我有類A,它包含一個公共方法foo()和一個屬性字符串_foo;二進制兼容關於更改返回類型C++
const string foo() {return _foo;}
當我改變
const string& foo(){return _foo;}
這還算是二進制兼容的?謝謝你的幫助!
返回一個字符串的副本將基本上做這樣的事情:
string s = foo();
會,當編譯器生成的機器代碼,出現類似:
string s;
foo(&s);
當然,如果你改變返回類型,指向s
的指針需要適當修改。所以,不能,你不能改變返回類型並保持二進制兼容性(並且幾乎肯定不會編譯,因爲函數的簽名已經改變 - >不同的錯位名稱 - >「未定義的引用」)。
Policies/Binary Compatibility Issues With C++: 這裏的目標是在編寫跨平臺C++代碼時列出最嚴格的條件集,這些代碼旨在用幾種不同的編譯器編譯。
該做與不該做:
... 你不能...:
它甚至還沒有接近改變返回值類型。
第一個版本返回一個臨時的。 std::string
的移動構造函數可以從此移開。第二個版本返回對_foo
的引用,從中您不能移動。