2017-04-16 21 views
6

AFAIK {} yeni kapsamını tanımlar, bu nedenle bu ne tanımlıyor?Ne Yapar ({}); C++ 'da mı demek istiyorsun?

({}); 

derleyici de bu programı derler:

#include <iostream> 
#include <string> 

int main() 
{ 
    std::string name; 
    std::cout << "What is your name? "; 
    { 
    ({}); 
    } 
    getline (std::cin, name); 
    std::cout << "Hello, " << name << "!\n"; 
} 

i derleyici programı derlenmeyecektir (); ile ({}); yerine zaman.

Neden iyi ({}); çalışır, ancak (); değil mi?

Ben cpp.sh. programı test ettik İyi derler.

+6

bana bir derleyici uzantısı gibi görünüyor. '-kalgın-hatalar 'ile GCC' hata: ISO C++ ifadeleri [-Wpedantic] 'içinde braced-gruplar yasaklar. – HolyBlackCat

+0

@HolyBlackCat Programı http://cpp.sh/ adresinde test ettim. İnce –

+2

GCC derler, standart dışı uzantılar varsayılan olarak etkinleştirilmiştir. -pedantik hatalar onları devre dışı bırakır. '-pedantic' (veya' -Wepdantic'), GCC’nin kullanıldığında uyarı üretmesini sağlar. Cpp.sh, ikincisini etkinleştirmek için bir onay kutusu vardır. – HolyBlackCat

cevap

8

({}); standart C++ bir parçası değildir. @HolyBlackCat tarafından doğru olarak söylendiği gibi bu derleyici uzantısıdır. Derleyici uzantılarını devre dışı bırakmak için -pedantic-errors kullanın.

g++ üzerine derlenmiş zaman

vc++ üzerine derlenmiş zaman canlı demo here Bkz canlı demo here bakınız.

+0

Yani VC daha paraleldir kullanıldıkları en az üç farklı kapsamları vardır yanlış bir ifadedir "AFAIK {} yeni kapsamını tanımlar" GCC standart-Wise bu gelince. Peki, bu bir ilk. –

+4

@GillBates: Neden bir ilk? Varsayılan olarak etkinleştirilen bir GCC derleyici uzantısının daha yaygın bir örneği için değişken uzunluklu dizilere bakın. Ne yazık ki, hem GCC hem de VC'nin ISO-uyumlu olduğu söylenmelidir (ya da olabildiğince uyumlu olmaya çalışın). 'G ++ program.cpp' veya' cl.exe program.cpp' komutunu çalıştıramazsınız ve derleyicinin düzgün davranmasını bekleyemezsiniz. –

+0

@Christian - En azından Microsoft için varsayılan ayar her zaman oldu * "Mümkün olduğu kadar çok kod derleyin, böylece müşteriler ürün desteğini çağırmazlar" *. Maliyet fayda analizi. :-) –