代码之家  ›  专栏  ›  技术社区  ›  João Paulo

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

  •  0
  • João Paulo  · 技术社区  · 5 年前

    我有这个初始化:

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

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

    可以 "a" 被认为是临时工。反对?

    我知道 std::string("a") 是临时工。对象。

    c_str() str 存储它。所以不是临时工。反对吧?

    2 回复  |  直到 5 年前
        1
  •  6
  •   NathanOliver    5 年前

    "a" 是类型为的字符串文本 const char[2] ,所以它是一个对象。

    std::string("a") 是prvalue表达式,不是临时对象(尚未)。当你打电话的时候 c_str() 将临时对象具体化并调用 获取指向临时对象数据的指针。

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

    这意味着 str公司

    所以你有两个对象,当它全部结束。悬挂的指针( ),和字符串文本(

        2
  •  -2
  •   luk32    5 年前

    只有一个。绳子。

    "a" 是一个文本,类型是 const char[] 大小合适,有静态存储。所以,这不是暂时的。

    str ,返回值为 c_str() const char

    不会创建其他对象。

        3
  •  -3
  •   curiousguy    5 年前

    可以 "a"

    它没有很好的定义 .

    是的 有明确的寿命。从技术上讲,使用它是可行的 正式开始一个物体生命周期的构造。