【发布时间】:2013-10-04 07:28:00
【问题描述】:
我有一个关于二进制兼容性的问题。我有 A 类,它包括一个公共方法 foo() 和一个属性字符串 _foo;
const string foo() {return _foo;}
当我改成
const string& foo(){return _foo;}
它仍然是二进制兼容的吗?感谢您的帮助!
【问题讨论】:
我有一个关于二进制兼容性的问题。我有 A 类,它包括一个公共方法 foo() 和一个属性字符串 _foo;
const string foo() {return _foo;}
当我改成
const string& foo(){return _foo;}
它仍然是二进制兼容的吗?感谢您的帮助!
【问题讨论】:
Policies/Binary Compatibility Issues With C++: 此处的目标是列出编写跨平台 C++ 代码时最严格的条件集,这些代码旨在使用多种不同的编译器进行编译。
注意事项:
...
你不能... :
【讨论】:
返回一个字符串的副本基本上会做这样的事情:
string s = foo();
当编译器生成机器码时,会出现类似于:
string s;
foo(&s);
当然,如果更改返回类型的类型,则需要适当修改指向s 的指针。所以不,你不能改变返回类型并保持二进制兼容性(它几乎肯定不会编译,因为函数的签名已经改变 -> 不同的重命名 -> “未定义的引用”)。
【讨论】:
它甚至没有接近。
第一个版本返回一个临时的。 std::string 的移动构造函数可以远离它。第二个版本返回对_foo 的引用,您无法从中移动。
【讨论】: