二进制兼容更改返回类型C++

CJA*_*LEE 5 c++ binary-compatibility

我有一个关于二进制兼容性的问题.我有一个类A,它包含一个公共方法foo()和一个属性字符串_foo;

const string foo() {return _foo;}
Run Code Online (Sandbox Code Playgroud)

当我改为

const string& foo(){return _foo;}
Run Code Online (Sandbox Code Playgroud)

它仍然是二进制兼容的吗?谢谢你的帮助!

Ser*_*kov 7

使用C++的策略/二进制兼容性问题:此处的目标是在编写跨平台C++代码时列出最严格的条件集,这些代码旨在使用多个不同的编译器进行编译.

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

  • 以任何方式更改返回类型


Mat*_*son 2

返回字符串的副本本质上会执行如下操作:

string s = foo();
Run Code Online (Sandbox Code Playgroud)

当编译器生成机器代码时,将出现类似于:

string s;
foo(&s);
Run Code Online (Sandbox Code Playgroud)

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