gpt4 book ai didi

c++ - 警告:支持指针的对象将在 std::pair 的完整表达式结束时销毁

转载 作者:行者123 更新时间:2023-12-03 06:54:22 24 4
gpt4 key购买 nike

以下代码给出了悬空指针错误。

    std::vector<std::pair<std::string, int>> c;
for (auto& b : c) {
const auto& [s, i] = b;
std::string_view v = s.substr(i);
std::cout << v;
}
我认为 b持有对 std::pair<std::string, int> 的引用,所以 s应该是对对象中字符串的引用。为什么这会产生悬空指针错误?我在这里缺少什么?神箭链接: https://godbolt.org/z/4zMvbr

最佳答案

std::string_view v = s.substr(i); , std::string::substr 返回 std::string按值,即它返回一个临时 std::string . std::string可能是 convertedstd::string_view隐式地,它是从 std::string::data() 构造的,即指向临时 std::string 的底层数组的指针.完整表达后,临时std::string被销毁,指针由 std::string_view 持有变成悬空指针。

It is the programmer's responsibility to ensure that the resultingstring view does not outlive the string.

std::string get_string();
int f(std::string_view sv);

int x = f(get_string()); // OK
std::string_view sv = get_string(); // Bad: holds a dangling pointer

关于c++ - 警告:支持指针的对象将在 std::pair 的完整表达式结束时销毁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64657316/

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