Rumah >pembangunan bahagian belakang >C++ >Berapa Lama Objek Sementara Hidup dalam Ungkapan C?

Berapa Lama Objek Sementara Hidup dalam Ungkapan C?

Patricia Arquette
Patricia Arquetteasal
2024-12-26 05:36:31877semak imbas

How Long Do Temporary Objects Live in C   Expressions?

Seumur Hidup Objek Sementara dalam C

Dalam C , objek sementara dicipta apabila ungkapan dinilai. Rujukan kepada objek sementara adalah sah sehingga akhir ungkapan penuhnya, iaitu ungkapan paling luar yang objek sementara bukan sebahagian daripada ungkapan lain. Ini membenarkan objek sementara digunakan sebagai argumen dalam panggilan fungsi dan dikembalikan daripada fungsi.

Pertimbangkan contoh berikut:

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);

Dalam contoh ini, objek StringBuffer sementara dibuat dan Saiznya () kaedah dipanggil untuk mendapatkan penunjuk kepada penimbal. Penunjuk ini kemudiannya dihantar ke fungsi GetString().

Hayat objek StringBuffer sementara dijamin sehingga akhir ungkapan penuh, iaitu panggilan ke GetString(). Oleh itu, pemusnah untuk objek sementara akan dipanggil selepas GetString() kembali. Tingkah laku ini konsisten tanpa mengira pengkompil yang digunakan.

Seumur hidup yang dijamin ini penting untuk templat ekspresi, yang bergantung pada fakta bahawa objek sementara akan kekal sah sehingga akhir ungkapan di mana ia dicipta.

Atas ialah kandungan terperinci Berapa Lama Objek Sementara Hidup dalam Ungkapan C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn