为什么在此示例中可以返回临时对象?

莱奥洛胡

char*[] 可以通过const引用将object传递给版本2()和版本3(),这意味着s2是一个临时对象,等于“ ###”或“ @@@”。

但是为什么临时对象 s2可以返回,而临时对象temp无法返回。

int main()
{
    result = version2(input, "###");
    cout << "Your string enhanced: " << result << endl;

    result = version3(input, "@@@");
    cout << "Your string enhanced: " << result << endl;
    return 0;
}

// No Error
const string & version2(string & s1, const string & s2)
{
    return s2; 
}

// Error
const string & version3(string & s1, const string & s2)
{
    string temp = s2 + s1 + s2;
    return temp;
}
songyuanyao

关键是物体的寿命

如前所述,对于第一种情况,std::string将创建一个临时并将其传递给version2(绑定到参数s2)。临时表达式将在完整表达式(即整个表达式)之后销毁result = version2(input, "###");这意味着所返回的引用version2仍然有效,可以将其用于分配给result

所有临时对象都将被销毁,这是评估(按词法)包含创建它们的点的完整表达式的最后一步,

对于第二种情况,将temp在内部创建一个本地对象version3,当它离开时将被销毁version3这意味着version3将始终返回悬挂的引用。并使用它分配给result潜在客户。编译器可能会对此做出诊断;但不必。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Java

为什么在此示例中Gradle编译失败?

来自分类Java

为什么在此示例中调用哈希码?

来自分类Dev

为什么git revert在此示例中失败?

来自分类Dev

为什么在此示例中参数b具有类型a?

来自分类Dev

什么是AllowAmbiguousTypes,为什么在此“ forall”示例中需要它?

来自分类Dev

为什么在此示例中需要对变量调用detach?

来自分类Dev

为什么在此示例中自动返回类型会丢失移动语义?

来自分类Dev

为什么在此示例中StateT更快?

来自分类Dev

为什么在此简单示例中Frame.tryValues失败?

来自分类Dev

为什么在此MobX示例中需要“获取”

来自分类Dev

Kotlin:为什么在此示例中Sequence更高效?

来自分类Dev

为什么在此示例中Map会有return语句?

来自分类Dev

比较对象-在以下示例中,为什么==返回'False'?

来自分类Dev

为什么在此示例中需要括号?

来自分类Dev

为什么在此队列示例中需要取消任务?

来自分类Dev

为什么在此示例中React会看到旧状态?

来自分类Dev

为什么useRef在此示例中不起作用?

来自分类Dev

为什么在此示例中需要Handler对象?

来自分类Dev

为什么在此示例中getElementsByTagName不起作用

来自分类Dev

为什么在此javascript示例中引用窗口对象?

来自分类Dev

为什么在此示例中以这种方式计算此指数?

来自分类Dev

为什么在此示例中ArrayAdapter始终为null?

来自分类Dev

为什么在此示例中命令注入不起作用?

来自分类Dev

为什么tsort在此示例中不报告任何循环?

来自分类Dev

为什么地板在此示例中返回少了一个元素

来自分类Dev

为什么SFINAE在此示例中无法按预期工作?

来自分类Dev

在此示例中,为什么枚举不需要创建对象?

来自分类Dev

为什么在此示例代码中不需要 readSync?

来自分类Dev

为什么媒体查询现在可以在此代码示例中工作?

Related 相关文章

  1. 1

    为什么在此示例中Gradle编译失败?

  2. 2

    为什么在此示例中调用哈希码?

  3. 3

    为什么git revert在此示例中失败?

  4. 4

    为什么在此示例中参数b具有类型a?

  5. 5

    什么是AllowAmbiguousTypes,为什么在此“ forall”示例中需要它?

  6. 6

    为什么在此示例中需要对变量调用detach?

  7. 7

    为什么在此示例中自动返回类型会丢失移动语义?

  8. 8

    为什么在此示例中StateT更快?

  9. 9

    为什么在此简单示例中Frame.tryValues失败?

  10. 10

    为什么在此MobX示例中需要“获取”

  11. 11

    Kotlin:为什么在此示例中Sequence更高效?

  12. 12

    为什么在此示例中Map会有return语句?

  13. 13

    比较对象-在以下示例中,为什么==返回'False'?

  14. 14

    为什么在此示例中需要括号?

  15. 15

    为什么在此队列示例中需要取消任务?

  16. 16

    为什么在此示例中React会看到旧状态?

  17. 17

    为什么useRef在此示例中不起作用?

  18. 18

    为什么在此示例中需要Handler对象?

  19. 19

    为什么在此示例中getElementsByTagName不起作用

  20. 20

    为什么在此javascript示例中引用窗口对象?

  21. 21

    为什么在此示例中以这种方式计算此指数?

  22. 22

    为什么在此示例中ArrayAdapter始终为null?

  23. 23

    为什么在此示例中命令注入不起作用?

  24. 24

    为什么tsort在此示例中不报告任何循环?

  25. 25

    为什么地板在此示例中返回少了一个元素

  26. 26

    为什么SFINAE在此示例中无法按预期工作?

  27. 27

    在此示例中,为什么枚举不需要创建对象?

  28. 28

    为什么在此示例代码中不需要 readSync?

  29. 29

    为什么媒体查询现在可以在此代码示例中工作?

热门标签

归档