我有一个关于二进制兼容性的问题。我有类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
的引用,从中您不能移动。