gpt4 book ai didi

c++ 关于按引用返回值的谜题

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:37:27 24 4
gpt4 key购买 nike

set<string> foo {
set<string> a;
// operation on a
return a;
}

如果我这样做会有任何性能差异吗:

set<string>& foo {
set<string> a;
// ops on a
return a;
}

如果是这样,我的理解是 a 将在堆栈上分配。 foo() 返回后,内存空间将被回收。我们如何引用已声明的内存?

最佳答案

在情况 B 中,对返回值的任何实际使用都会导致未定义的行为。您不得通过引用返回局部自动变量并期望任何人都能够访问它。

查看此 live work space警告信息。当您执行此类操作时,您的编译器通常会警告您,但并不总是建议依赖它。

请注意,在 C++11 中,第一个示例非常高效。在基于左值引用的移动和 NRVO 之间,返回本地的成本 std::vector<std::string> by value 大约是几个 ifs 和复制 32 位内存,或者在某些情况下更少(即,实际上零成本,因为 std::set 直接在调用者范围内构建)。

关于c++ 关于按引用返回值的谜题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16025606/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com