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

  • BuzzFeedVideo

    BuzzFeedVide

    10 AĞUSTOS 2011
  • Flash CS6 Video Tutorials for Beginners (Actionscript 3 Gaming)

    Flash CS6 Vi

    14 EYLÜL 2012
  • Moto Journal

    Moto Journal

    28 Mayıs 2007