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