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

Berapa Lama Objek Sementara Hidup dalam Ungkapan C?

Patricia Arquette
Lepaskan: 2024-12-26 05:36:31
asal
812 orang telah melayarinya

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);
Salin selepas log masuk

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!

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