SORU
25 ŞUBAT 2009, ÇARŞAMBA


C geçici garantili ömür boyu ?

C bir işlev çağrısı içinde oluşturulan ama bir parametre olarak kullanılan geçici bir değişken ömür boyu garanti veriyor mu? İşte size bir örnek sınıf:

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

Ve burada bunu nasıl kullanırsınız

// this is from a crusty old API that can't be changed
void GetString(char * str, int maxlength);

std::string mystring;
GetString(StringBuffer(mystring).Size(MAXLEN), MAXLEN);

Geçici StringBuffer nesnesi için yıkıcı adlı alacaksınız? Oldu:

  • Çağrısı önce GetString?
  • Sonra GetString verir?
  • Derleyici bağımlı?

C yerel geçici bir değişken geçerli değil - bu bir üye değişkeni için bir başvuru olduğunda ebeveyn nesneler için de geçerli mi? bir başvuru olduğu sürece olacağını garanti eder biliyorum

Teşekkürler.

CEVAP
25 ŞUBAT 2009, ÇARŞAMBA


Geçici bu tür yıkıcı tam ifade sonunda denir. Başka bir ifade olan en dış tabir. Bu işlev ve değer değerlendirildikten sonra senin durumunda. Bu yüzden, tüm iyi çalışır.

İfade şablonları ne iş yapar ki: bir ifade gibi geçici bu tür başvurular basılı tutun

e = a   b * c / d

Her geçici ifadesi kadar sürecek çünkü

x = y

Tamamen değerlendirilir. Çok kısaca Standart 12.2 Temporary objects nitelendirdi.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:
C++

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Hallucination Land

    Hallucinatio

    14 Ocak 2011
  • Kamikazeepanda

    Kamikazeepan

    5 ŞUBAT 2006
  • Xcode programming tutorials

    Xcode progra

    17 EYLÜL 2006