Aracılığıyla paylaş


Standart Dışı Davranış

Aşağıdaki bölümlerde, C++'ın Microsoft uygulamasının C++ standardına uymadığı bazı yerler listelanmaktadır. Aşağıda verilen bölüm numaraları, C++11 standardında (ISO/IEC 14882:2011(E)) bölüm numaralarına başvurur.

C++ standardında tanımlananlardan farklı derleyici sınırlarının listesi Derleyici Sınırları'nda verilmiştir.

Birlikte Değişken Dönüş Türleri

Sanal işlevde bağımsız değişkenlerin bir değişken sayısı olduğunda, sanal taban sınıfları birlikte değişken dönüş türleri olarak desteklenmez. Bu, C++11 ISO belirtiminin 7. paragrafı olan bölüm 10.3 ile uyumlu değildir. Aşağıdaki örnek derlenemez; derleyici hatası C2688 oluşturur:

// CovariantReturn.cpp
class A
{
   virtual A* f(int c, ...);   // remove ...
};

class B : virtual A
{
   B* f(int c, ...);   // C2688 remove ...
};

Şablonlarda Bağımlı Olmayan Adları Bağlama

Microsoft C++ derleyicisi şu anda başlangıçta bir şablonu ayrıştırırken bağımsız adları bağlamayı desteklememektedir. Bu, C++11 ISO belirtiminin 14.6.3 bölümüne uymaz. Bu, şablonun görülmesinden sonra (ancak şablon örneği oluşturulmadan önce) aşırı yüklerin bildirilmesine neden olabilir.

#include <iostream>
using namespace std;

namespace N {
   void f(int) { cout << "f(int)" << endl;}
}

template <class T> void g(T) {
    N::f('a');   // calls f(char), should call f(int)
}

namespace N {
    void f(char) { cout << "f(char)" << endl;}
}

int main() {
    g('c');
}
// Output: f(char)

İşlev Özel Durum Belirleyicileri.

dışındaki throw() işlev özel durum tanımlayıcıları ayrıştırılır ancak kullanılmaz. Bu, ISO C++11 belirtiminin 15.4 bölümüne uymaz. Örneğin:

void f() throw(int); // parsed but not used
void g() throw();    // parsed and used

Özel durum belirtimleri hakkında daha fazla bilgi için bkz . Özel Durum Belirtimleri.

char_traits::eof()

C++ standardı, char_traits::eof değerinin geçerli char_type bir değere karşılık olmaması gerektiğini belirtir. Microsoft C++ derleyicisi bu kısıtlamayı türü chariçin zorlar, ancak türü wchar_tiçin zorlamaz. Bu, C++11 ISO belirtiminin 12.1.1 bölümündeki Tablo 62'deki gereksinime uygun değildir. Aşağıdaki örnekte bu davranış gösterilmektedir.

#include <iostream>

int main()
{
    using namespace std;

    char_traits<char>::int_type int2 = char_traits<char>::eof();
    cout << "The eof marker for char_traits<char> is: " << int2 << endl;

    char_traits<wchar_t>::int_type int3 = char_traits<wchar_t>::eof();
    cout << "The eof marker for char_traits<wchar_t> is: " << int3 << endl;
}

Nesnelerin Depolama Konumu

C++ standardı (bölüm 1.8 paragraph 6) tam C++ nesnelerinin benzersiz konumlara sahip olmasını gerektirir. Ancak Microsoft C++ ile veri üyesi olmayan türlerin nesnenin ömrü boyunca depolama konumunu diğer türlerle paylaşacağı durumlar vardır.