【问题标题】:Lifetime of temporary object: iterator to temporary vector in nested function call临时对象的生命周期:嵌套函数调用中临时向量的迭代器
【发布时间】:2015-10-21 15:17:49
【问题描述】:

假设我有这样的类:

struct QString {
    //return null terminated array
    std::vector<char> toLocal8Bit() const;
};

struct string_view {
    const char *data;
    size_t len;
    string_view(const char *str): data(str), len(std::strlen(str)) {}
};

我有这样的签名功能:

void f(const string_view& str);

它是有效的代码

QString str;
f(string_view(&*str.toLocal8Bit().begin()));

?

我的意思是临时 std::vector 什么时候会被销毁?

【问题讨论】:

    标签: c++ iterator lifetime function-call temporary-objects


    【解决方案1】:

    临时在完整语句的末尾被销毁。所以这是安全的。

    【讨论】:

    • 但是这里实际上是两个嵌套临时的,它们会以相反的顺序被销毁?
    • 这里没关系。重要的是,当第二个临时对象被构造时,第一个临时对象仍然存在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-07
    • 2012-09-22
    • 2012-05-19
    • 1970-01-01
    • 2013-11-20
    • 2012-05-19
    相关资源
    最近更新 更多