SORU
31 Temmuz 2009, Cuma


C , eğer atmak bir ifade ise, kendi türü nedir?

Bu benim kısa mücadeleler biri kadar reddit aldım:

http://www.smallshire.org.uk/sufficientlysmall/2009/07/31/in-c-throw-is-an-expression/

Temelde, yazar C : bu işaret

throw "error"

bir ifadesidir. Bu aslında oldukça net bir şekilde ana metin ve dilbilgisi hem de C standardında kaplıca. Ancak, net (bana en azından) ne ifade türü nedir? Tahmin etmiştim "void", ama g 4.4.0 ve Comeau ile deneme biraz bu kod vermiştir:

    void f() {
    }

    struct S {};

    int main() {
        int x = 1;
        const char * p1 = x == 1 ? "foo" : throw S();  // 1
        const char * p2 = x == 1 ? "foo" : f();        // 2
    }

Derleyiciler //1 ile hiçbir sorun yoktu ama koşullu işleç türleri farklı olduğu için //2 üstüne kustu. throw bir ifade türü void görünmüyor.

Nedir?

Eğer cevap verirseniz, Standart teklif ile açıklamaları lütfen tekrar.

< / ^ hr .

Bu bir tür hakkında çok koşullu operatör ifadeler atmak ile ilgili olarak ifade kesinlikle yoktu bir şey atmak olmadığı anlaşıldı önce bugün. Özellikle David Thornley şöyle cevap verdi herkese, ama teşekkürler.

CEVAP
31 Temmuz 2009, Cuma


Göre standart, 5.16 paragraf 2, birinci nokta, "ikinci veya üçüncü işlenen (ama ikisi birden değil) atmak-ifade (15.1); sonuç olarak türünün Diğer ve bir rvalue." Bu nedenle, koşullu operatör at-ifade ne olduğu önemli değil, ama sadece başka bir türünü kullanır.

Aslında, 15.1, paragraf 1, açıkça "Bir ifade atmak tipi void dir." diyor

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • boniver

    boniver

    17 NİSAN 2006
  • RiceBunny

    RiceBunny

    16 ŞUBAT 2006
  • UKF Dubstep

    UKF Dubstep

    29 NİSAN 2009