gpt4 book ai didi

c++ - 在这次初始化中创建了多少个临时对象?

转载 作者:行者123 更新时间:2023-11-30 04:48:21 27 4
gpt4 key购买 nike

我有这个初始化:

const char* str = std::string("a").c_str();

在这次初始化中创建了多少个临时对象?

"a" 可以被认为是临时的吗?对象?

我知道 std::string("a") 是一个临时变量。对象。

c_str()的结果是一个对象,str存储它。所以不是临时工。对象,对吧?

最佳答案

"a"const char[2] 类型的字符串文字,因此它是一个对象。

std::string("a") 是一个纯右值表达式并且(目前)还不是一个临时对象。当您调用 c_str() 时,您会具体化一个临时对象并对其调用 c_str() 以获取指向临时对象数据的指针。

然后您将指针的地址分配给 str,所以现在 str 保存指向临时对象数据的指针的地址。在该完整表达式的末尾,具体化的临时对象被销毁,使对该临时数据的迭代器/指针/引用无效。

这意味着 str 现在指向您不再拥有的内存,称为悬挂指针。除了给它分配一个不同的地址之外,对它做任何事情都是未定义的行为。

所以当它全部结束时你有 2 个对象。一个悬挂指针 (str) 和一个字符串文字 ("a")。

关于c++ - 在这次初始化中创建了多少个临时对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55867516/

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