gpt4 book ai didi

c++ - 为从函数返回的右值引用分配值

转载 作者:行者123 更新时间:2023-12-01 12:18:52 25 4
gpt4 key购买 nike

#include <utility>
template <typename Container>
decltype(auto) index(Container &&arr, int n) {
return std::forward<Container>(arr)[n];
}

进行函数调用:
#include <vector>
index(std::vector {1, 2, 3, 4, 5}, 2) = 0;

函数调用完成后,对象 std::vector {1, 2, 3, 4, 5}将被破坏,将值分配给已释放地址将导致未定义的行为。但是上面的代码运行良好,并且valgrind没有检测到任何东西。也许编译可以帮助我制作另一个不可见的变量,例如
auto &&invisible_value {index(std::vector {1, 2, 3, 4, 5}, 2)};
invisible_value = 9;

如果我的猜测是错误的,我想知道为什么可以为从函数返回的右值引用分配值,以及何时销毁临时对象 index(std::vector {1, 2, 3, 4, 5}, 2)

这个想法起源于《有效的现代C++》,第3项:了解 decltype

最佳答案

您说过“函数调用完成后,对象 vector {1,2,3,4,5}将被销毁”,但这是不正确的。在语句结束(即下一行代码)之前,不会删除为函数调用创建的临时目录。否则,想象通过临时字符串的c_str()会破坏多少代码。

关于c++ - 为从函数返回的右值引用分配值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62165932/

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