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

  • case LianLi

    case LianLi

    28 Mayıs 2010
  • cdgotx

    cdgotx

    8 Kasım 2011
  • Megan Parken

    Megan Parken

    19 Temmuz 2009