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

  • George McCarron

    George McCar

    29 Mayıs 2013
  • Louis C.K.

    Louis C.K.

    18 HAZİRAN 2006
  • TechBalance

    TechBalance

    12 HAZİRAN 2011