【问题标题】:Binary Compatible about changing return type C++二进制兼容关于更改返回类型 C++
【发布时间】:2013-10-04 07:28:00
【问题描述】:

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

const string foo() {return _foo;}

当我改成

const string& foo(){return _foo;}

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

【问题讨论】:

    标签: c++ binary-compatibility


    【解决方案1】:

    Policies/Binary Compatibility Issues With C++: 此处的目标是列出编写跨平台 C++ 代码时最严格的条件集,这些代码旨在使用多种不同的编译器进行编译。

    注意事项:
    ... 你不能... :

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

    【讨论】:

      【解决方案2】:

      返回一个字符串的副本基本上会做这样的事情:

      string s = foo();
      

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

      string s;
      foo(&s);
      

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

      【讨论】:

        【解决方案3】:

        它甚至没有接近。

        第一个版本返回一个临时的。 std::string 的移动构造函数可以远离它。第二个版本返回对_foo 的引用,您无法从中移动。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-04-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多