首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >由值返回的变量的相同地址

由值返回的变量的相同地址
EN

Stack Overflow用户
提问于 2012-02-22 17:36:45
回答 4查看 80关注 0票数 0

我有以下方法,它按值返回本地声明的对象:

代码语言:javascript
复制
Human Human::getLocalDeclaredHuman() {    
    Human human;
    std::cout << &human << std::endl;
    return human;
}

我称之为这种方法:

代码语言:javascript
复制
Human a;
Human b = a.getLocalDeclaredHuman();
std::cout << &b << std::endl;
std::cout << b.getName() << std::endl;

这是正在运行的程序的输出:

0x22fe58

0x22fe58

无名氏

因此,在方法中声明为局部变量的变量human与变量b具有相同的地址。我认为return-by-value将创建对象的副本,而对象b具有另一个地址,类似于本地声明的对象human。

我的问题是:

如果这里b和人工有相同的地址,那么按值返回和按引用返回的区别在哪里?

EN

回答 4

Stack Overflow用户

发布于 2012-02-22 17:39:49

这是因为编译器执行的返回值优化

票数 1
EN

Stack Overflow用户

发布于 2012-02-22 17:41:03

副本很可能被省略到外部作用域,因此被调用的唯一方法是默认的人工复制构造函数。要获得更多信息,请查看此问题

票数 1
EN

Stack Overflow用户

发布于 2012-02-22 17:40:12

这是返回值优化。编译器知道您将使用它做什么,所以已经在分配它的位置创建了它,所以它不需要复制。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9400018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档