2013-10-04 30 views
5

我有一个关于二进制兼容性的问题。我有类A,它包含一个公共方法foo()和一个属性字符串_foo;二进制兼容关于更改返回类型C++

const string foo() {return _foo;} 

当我改变

const string& foo(){return _foo;} 

这还算是二进制兼容的?谢谢你的帮助!

回答

2

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

string s = foo(); 

会,当编译器生成的机器代码,出现类似:

string s; 
foo(&s); 

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

7

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

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

  • 以任何方式
1

它甚至还没有接近改变返回值类型。

第一个版本返回一个临时的。 std::string的移动构造函数可以从此移开。第二个版本返回对_foo的引用,从中您不能移动。

相关问题