我有一个关于二进制兼容性的问题。我有 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;}
它仍然是二进制兼容的吗?谢谢你的帮助!
C++ 的策略/二进制兼容性问题:此处的目标是列出编写跨平台 C++ 代码时最严格的条件集,这些代码旨在使用几种不同的编译器进行编译。
该做什么和不该做什么:
......你不能......:
返回一个字符串的副本基本上会做这样的事情:
string s = foo();
当编译器生成机器代码时,会出现类似于:
string s;
foo(&s);
自然,如果更改返回类型的类型,则s
需要适当修改指向的指针。所以不,你不能改变返回类型并保持二进制兼容性(它几乎肯定不会编译,因为函数的签名已经改变 -> 不同的重命名 -> “未定义的引用”)。
它甚至不接近。
第一个版本返回一个临时的。的移动构造函数std::string
可以远离它。第二个版本返回对 的引用_foo
,您不能从中移动。