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

Berapa Lama C Objek Sementara Hidup?

Barbara Streisand
Lepaskan: 2024-12-23 13:36:02
asal
472 orang telah melayarinya

How Long Do C   Temporary Objects Live?

Hayat Objek Sementara dalam C

C memastikan bahawa jangka hayat pembolehubah sementara memanjang ke penghujung ungkapan penuh yang dibina di dalamnya. Ini terpakai kepada objek sementara seperti yang dibuat dalam panggilan fungsi tanpa dihantar sebagai parameter.

Sebagai contoh, pertimbangkan kelas 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;
};
Salin selepas log masuk

Jika kami menggunakan kelas ini seperti berikut:

// Crusty old API that cannot be changed
void GetString(char* str, int maxlength);

std::string mystring;
GetString(StringBuffer(mystring).Size(MAXLEN), MAXLEN);
Salin selepas log masuk

Pemusnah untuk objek StringBuffer sementara akan dipanggil selepas GetString kembali. Tingkah laku ini dijamin oleh piawai C dan membenarkan penggunaan objek sementara yang boleh dipercayai dalam panggilan fungsi.

Piawaian menentukan bahawa jangka hayat objek sementara memanjang ke penghujung ungkapan penuh, iaitu yang paling luar ungkapan yang bukan sebahagian daripada ungkapan lain. Dalam kes ini, ungkapan penuh ialah panggilan fungsi, jadi jangka hayat objek sementara dilanjutkan sehingga fungsi kembali.

Jaminan ini penting untuk templat ekspresi, yang boleh menyimpan rujukan kepada objek sementara dalam ungkapan kompleks. Ia memastikan objek kekal sah sehingga keseluruhan ungkapan dinilai.

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

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan