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)
它仍然是二进制兼容的吗?谢谢你的帮助!
使用C++的策略/二进制兼容性问题:此处的目标是在编写跨平台C++代码时列出最严格的条件集,这些代码旨在使用多个不同的编译器进行编译.
做与不做:
......你不能......:
返回字符串的副本本质上会执行如下操作:
string s = foo();
Run Code Online (Sandbox Code Playgroud)
当编译器生成机器代码时,将出现类似于:
string s;
foo(&s);
Run Code Online (Sandbox Code Playgroud)
当然,如果改变返回类型的类型,则s需要适当修改指向的指针。所以不,你不能改变返回类型并保持二进制兼容性(而且它几乎肯定不会编译,因为函数的签名已经改变 - >不同的损坏名称 - >“未定义的引用”)。
| 归档时间: |
|
| 查看次数: |
228 次 |
| 最近记录: |