2013-09-05 11 views
5

Kısa bir süre önce C11'de keşfettim ve birçok yeni özellik C kodunu daha kolay bir şekilde yazdırabiliyor. Bu özelliklerin C++ 11 tarafından resmi olarak desteklendiğini merak ediyorum. Benim endişem, uygulama veya derleyici sorunları değil, yeni C++ standardı ile ilgili.C++ 11, C11'in yeni özelliklerini destekliyor mu?

+0

Bazıları, ancak bunlar iki ayrı dildir. – chris

+0

Özellikle hangi özellikler? Bazı yeni C özellikleri de C++ 'da özelliklerdir (@chris bağımsız dil olduklarını söyleyerek garanti vermezler.) –

+1

C++ ile aşina olduğum ama C11 ile aşina olmadığım: Özellikle neye baktığınızı bilmek yardımcı olur için. Ayrıca, iki dilin farklı yaklaşımlar ve özellikler peşinde olduğu bazı alanlar C ile C++ arasında eşlenmeyecektir. –

cevap

5

Hayır, C++ 11, C11'in TÜM özelliklerini desteklemez. C99'un tüm özelliklerini bile desteklemiyor. Örneğin değişken uzunluktaki diziler C99'da tanıtıldı, ancak C++ bunları henüz desteklemiyor. Detaylar için bkz. this question.

+0

Değişken uzunlukta diziler C++ 14 için (yalnızca ifadenize bir zaman aralığı vermek için) sıralanır. – zneak

+0

@zneak: Hayır, C++ için düşünülen "çalışma zamanı bağlı diziler" C'nin VLA'larıyla aynı değildir. –

+0

@BenVoigt, [N3820] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3820.html#dcl.array) "int foo" formunun bir örneğini içerir. n = sabit olmayan bir n ile. Hangi farkları bilmeliyim? Yine de, C++ 14 için artık uygun olmadığını görüyorum. – zneak

1

C++ 11 standardı özellikle C standart kütüphanesi için C99 standardını referans alır.

C++ 11 C99'da bulunan ancak C90'da olmayan özelliklerin bazılarını değil de tümünü destekler. (Bazı C99'a özgü özellikler ya C++ ile farklı şekilde desteklenir ya da uygun görülmemiştir.)

C11, C99'un üstüne bir dizi özellik ekledi; Bu yeni özelliklerin çoğu, C++ 'ya eklenmiş numaralı idi. Buna

kayda değer bir istisnası (C++ 11'inde C11 ile <threads.h>, <thread>) iplik desteğidir. Ne kadar benzer olduklarını bilmek için bu kadar yakından bakmadım.

(C11, aynı zamanda yeni özellikler, hem de bazı C99 bazı özellikleri, isteğe yaptı;. Bu da C++ yansıyan değil)

+2

Anlayışım, C11'in, hem dil desteği hem de bileşenler olarak iş parçacığı ve eşitleme ilkelleriyle uğraşmak için kullanabileceği bir iş parçacığı desteği eklemesidir. Bu özelliklerin C++ olduğunu düşünüyorum, ancak şartnameler mutlaka C ve C++ arasında aynı değildir. –

+0

Ayrıca, anonim yapılar, dönüş işlevleri, bazı tür genel ifadeler ve benzerleri gibi başka küçük şeyler de vardı. Ve en önemlisi, nihayet 'gets()' ndan kurtuldu. –

+0

C11, C++ 11 iş parçacığı desteği (ve atomik) tersi daha fazla;) –

2

, iki C11 ve C arasında paylaşılır önemli ilaveler arasında + +11: dişler ve atomlar. Ayrıca yeni bellek sıralama modelinin ikisi arasında paylaşıldığını düşünüyorum, fakat C++ 11'i kesinlikle bilmeyecek kadar iyi bilmiyorum.

C11'e yapılan önemli bir eklenti muhtemelen C++ tarafından asla paylaşılmayacaktır: _Generic ile tip genel ifadeler. Bunun kullanım durumlarının birçoğu için, özellikle fonksiyon aşırı yüklenmesi, bunu uygulayan C++ yapıları zaten vardır. Derleme zamanı tamsayı sabit ifadelerinin algılanması gibi daha ayrıntılı kullanım durumları C++ tarafından kapsanmaz. C++ 1, constexpr sahiptir, ancak addan başka, bunun bir ifadenin sabit bir ifade olup olmadığını belirlemek için bir araç olmadığını, ancak bir nesnenin veya bir işlev dönüşünün sabit olduğunu belirtmek için bir araç olmadığını öne sürebilir. İki durum için tamamen farklı kod üretilmesi (sabit ve sabit olmayan) mümkün görünmemektedir.

C++'daki ana kullanım durumları için yalnızca _Generic'a gerek yoktur, aynı zamanda ön işlem aşamasında makro programlamaya da bağlıdır. Makrolar, C++ topluluğunun büyük bölümleri tarafından kaşıldığından, bu da kesinlikle bir konsensüs bulamayacaktı.

+0

downvoted eklendi. C++ 11, "constexpr" ile derleme zamanı sabit ifadelerini algılayabilir. – TemplateRex

+0

@TemplateRex, Ben bunun C özelliği ile karşılaştırıldığında, bunun içine bakacağız. Düzeltme zamanı vermeden böyle bir şeyin düşürülmesi biraz aşırı görünüyor. Geçen gün beni takip eden ve yıllar önce verdiğim birkaç eski cevapta küçülecek olan bir şansın var mı? –

+0

Hayır, her zaman bir yorum bırakmaya çalışıyorum ve genellikle cevabın bir güncellemesi varsa tekrar kontrol ederim, böylece herhangi bir downvotu geri çekebilirim. Diğer downvotes ile ilgili olarak, dün gece C++ chat Lounge'da bir kaç kişi olduğunu düşünüyorum, buradaki iki soru işaretinin yer aldığı [bu soru] (http://stackoverflow.com/q/19120326/819272) adresindeki etiket düzenlemenizle ilgili. (Benimkilerden biri de dahil olmak üzere) aynı zamanda aynı zamanda düşürülmüştü (* yorumsuz *). – TemplateRex