二进制兼容更改返回类型C ++

时间:2013-10-04 07:28:01

标签: c++ binary-compatibility

我对二进制兼容性有疑问。我有一个类A,它包含一个公共方法foo()和一个属性字符串_foo;

const string foo() {return _foo;}

当我改为

const string& foo(){return _foo;}

它仍然是二进制兼容的吗?谢谢你的帮助!

3 个答案:

答案 0 :(得分:7)

Policies/Binary Compatibility Issues With C++: 这里的目标是在编写跨平台C ++代码时列出最严格的条件集,这些代码旨在使用多个不同的编译器进行编译。

做与不做:
... 你不能......:

  • 以任何方式更改退货类型

答案 1 :(得分:2)

返回字符串的副本基本上会做这样的事情:

string s = foo();
当编译器生成机器代码时,

将显示类似于:

string s;
foo(&s);

当然,如果更改返回类型的类型,则需要适当修改指向s的指针。所以不,你不能改变返回类型并保持二进制兼容性(它几乎肯定不会编译,因为函数的签名已经改变 - >不同的错误名称 - >“未定义引用”)。

答案 2 :(得分:1)

它甚至不是很接近。

第一个版本返回临时版本。 std::string的移动构造函数可以远离它。第二个版本返回对_foo的引用,您无法从中移动。