我对二进制兼容性有疑问。我有A类,其中包括一个公共方法foo()和一个属性字符串_foo;
const string foo() {return _foo;}
当我改变为
const string& foo(){return _foo;}
它仍然是二进制兼容的吗?谢谢你的帮助!
返回字符串的副本实际上将执行以下操作:
string s = foo();
编译器生成机器代码时,将类似于以下内容:
string s;
foo(&s);
自然,如果您更改返回类型的类型,则s
需要适当修改指向的指针。因此,不能,您不能更改返回类型并保持二进制兼容性(并且几乎可以肯定不会编译,因为该函数的签名已更改-> differentnet混乱的名称->“未定义的引用”)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句