SORU
18 AĞUSTOS 2015, Salı


Operatör için negatif indeks[] iyi tanımlanmış mı?

Çok kötü tarzı bir kodlama olacağını biliyorum, ama aşağıdaki kodu tam olarak benim makinede çalışır. Ancak davranış olarak nasıl olmalıdır? Taşınabilir?

int main()
{
    int *p = new int[3];
    int *q = &p[2];
    q[-1] = 41;
    std::cout << p[1];
    delete[] p;
}

CEVAP
18 AĞUSTOS 2015, Salı


Bu iyi tanımlanmış, hem sözdizimsel ve anlamsal.

[ifade.sub] 1/(N3337):

İfadesi E1[E2] Aynı (tanım gereği) *((E1) (E2)).

Sizin ifade sözdizimsel olarak geçerli olacak şekilde *(q-1) = 41;, aynıdır.

[ifade.Ekle]/5 (N3337)

Tamsayı türü olan bir deyim eklendi veya bir işaretçi çıkartılır, sonuç pointer işlenen türü vardır. Eğer işaretçiyi işlenen puan için bir elemanın bir dizi nesne ve dizi yeterince büyük, sonuç, puan için bir öğe ofset orijinal öğe gibi farklı alt simgeler ortaya çıkan ve özgün bir dizi öğelerini eşit integral ifadesi.

q integral ifadeniz için geçerli bir büyüklükteki bir dizi nesne unsuru işaret beri, anlamsal geçerlidir.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 3dmmfavs

    3dmmfavs

    29 Kasım 2009
  • jkimisyellow...ish

    jkimisyellow

    8 Temmuz 2009
  • superemposed

    superemposed

    25 Aralık 2007