SORU
30 NİSAN 2015, PERŞEMBE


Neden't ben başka bir işlev içinde bir işlev tanımlayabilirsiniz?

Bu lambda fonksiyonu bir soru değil, bir değişken için bir lambda ata biliyorum.

Bize bildirir ancak kod içinde bir işlev tanımlamak için izin vermenin ne anlamı var?

Örneğin:

#include <iostream>

int main()
{
    // This is illegal
    // int one(int bar) { return 13   bar; }

    // This is legal, but why would I want this?
    int two(int bar);

    // This gets the job done but man it's complicated
    class three{
        int m_iBar;
    public:
        three(int bar):m_iBar(13   bar){}
        operator int(){return m_iBar;}
    }; 

    std::cout << three(42) << '\n';
    return 0;
}

Peki ben neden C çok daha karmaşık görünüyor işe yaramaz, ve three ama izin vermeyecek gibi görünüyor two izin one bilmek mi istiyorsunuz?

DÜZENLEME:

Cevapları öyle görünüyor ki orada-kod Bildirgesi-ebilmek muktedir önlemek ad kirliliği, ne istiyordum duymak rağmen neden yeteneğini ilan işlevleri olmuştur izin ama yeteneğini tanımlamak için fonksiyonları olmuştur izin verilmedi.

CEVAP
30 NİSAN 2015, PERŞEMBE


Cevap "tarihsel nedenler". C blok kapsamı fonksiyon bildirimleri olabilir, ve C tasarımcılar bu seçeneği kaldırarak fayda görmedi.

Örnek bir kullanım şöyle olabilir:

#include <iostream>

int main()
{
    int func();
    func();
}

int func()
{
    std::cout << "Hello\n";
}

IMO, bu kötü bir fikir çünkü bu kolay bir hata ile sağlayan bir beyanname eşleşmiyor işlevin gerçek tanımı, önde gelen tanımlanmamış davranışları olan birisi tarafından teşhis derleyici.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Austin Evans

    Austin Evans

    5 AĞUSTOS 2007
  • Rooster Teeth

    Rooster Teet

    11 Temmuz 2006
  • ThreadBanger

    ThreadBanger

    2 Mart 2007