, this question cevabım itibaren ardından hem C++ 11 ve C++ 14:C++ 11 ve C++ 14'de "bsearch" ifadesi bozuk mu?
:
:
[C++11, C++14: 25.5/2]:
içeriği Standart C kütüphanesi başlığında aşağıdaki istisnalarla<stdlib.h>
aynıdır[C++11, C++14: 25.5/3]:
işlev imzası:bsearch(const void *, const void *, size_t, size_t, int (*)(const void *, const void *));
iki bildirimleri ile değiştirilir Her ikisi de orijinal deklarasyonla aynı davranışa sahip olan
. Ancak
,
[C++11, C++14: 7.5/5]:
iki bildirim aynı ad üyesi olabilir veya aynı isme sahip nesneleri açıklamak için aynı isim ve parametre tip listesine (8.3.5) ile işlevlerini bildirmek durumunda Aynı isim alanından üyeler olmak ve beyannameler farklı dil bağlantıları isimleri vermek, program kötü biçimlendirilmiş; Bildirimler farklı çeviri birimlerinde görünürse hiçbir teşhis gerekmez. [..]
Bu bir kusur mu?
Yanıt, bu argümanların aynı argümanlara sahip olup olmadığı ile ilgili olarak menteşeler. Eğer bağlantı türün bir parçasıysa, 'karşılaştır' her iki örnekte de farklı bir türe sahiptir ... eğer olsa, bunu türler için ilan etmenin kolay bir yolunu istiyorum ve hiçbirinin farkında değilim. – Deduplicator
@Deduplicator Standart C++ 'da, şablon takma adlarından faydalanabilirsiniz. 'template kullanarak CxxFunc = R (T ...); extern "C" {template kullanarak CFunc = R (T ...); } '. CFunc ve CxxFunc <...> 'olarak karşılaştırır.Çoğu uygulama, 'extern' C 'bloklarındaki şablonlara izin vermediği için reddeder, ancak bu kesinlikle geçerlidir. Kısıtlama, bir şablonun "extern" C "bağlantısına sahip olamamasıdır, bir şablon" extern "C" bloğunda görünemez. Bir şablon takma adında dil bağlantısı yok, bu yüzden sorun yok. –
hvd
C++ 98'de aynı şekilde 25.4/3 (ve qsort için 25.4/4) – Cubbi