首页 > 后端开发 > C++ > 临时对象在 C 表达式中存在多久?

临时对象在 C 表达式中存在多久?

Patricia Arquette
发布: 2024-12-26 05:36:31
原创
823 人浏览过

How Long Do Temporary Objects Live in C   Expressions?

C 中临时对象的生命周期

在 C 中,临时对象是在计算表达式时创建的。对临时对象的引用在其完整表达式结束之前一直有效,完整表达式是最外层表达式,其中临时对象不属于另一个表达式。这允许临时对象用作函数调用中的参数并从函数返回。

考虑以下示例:

class StringBuffer
{
public:
    StringBuffer(std::string & str) : m_str(str)
    {
        m_buffer.push_back(0);
    }
    ~StringBuffer()
    {
        m_str = &m_buffer[0];
    }
    char * Size(int maxlength)
    {
        m_buffer.resize(maxlength + 1, 0);
        return &m_buffer[0];
    }

private:
    std::string & m_str;
    std::vector<char> m_buffer;
};

void GetString(char * str, int maxlength);

std::string mystring;
GetString(StringBuffer(mystring).Size(MAXLEN), MAXLEN);
登录后复制

在此示例中,创建了一个临时 StringBuffer 对象及其大小调用 () 方法来获取指向缓​​冲区的指针。然后将该指针传递给 GetString() 函数。

临时 StringBuffer 对象的生命周期得到保证,直到完整表达式结束,即对 GetString() 的调用。因此,临时对象的析构函数将在 GetString() 返回后调用。无论使用什么编译器,此行为都是一致的。

这种保证的生命周期对于表达式模板至关重要,它依赖于这样一个事实:临时对象将保持有效,直到创建它们的表达式结束为止。

以上是临时对象在 C 表达式中存在多久?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板