Neden C++, bir sınıf bildirimi içinde tanımlanabilmesi için yalnızca integral türlerin ve enum'un (enum'un ayrılmaz bir tür olduğunu) anlamıyorum. Kayan nokta türleri de dahil olmak üzere tüm diğer tipler (yani, çift ve yüzdürme), sınıf beyanı dışında tanımlanmak zorundadır. Açıkçası bunun bir nedeni olmalı, ama anlayamıyorum.Neden C++ sınıfında yalnızca integral veya enum türü başlatılabilir?
Kod örnek:
#include <iostream>
using namespace std;
struct Node {
static const int c = 0; // Legal Definition
static const long l = 0l; // Legal Definition
static const short s = 0; // Legal Definition
static const float f = 0.0f; // Illegal definition
static const string S = "Test"; // Illegal definition
static const string JOB_TYPE; // Legal declaration
static const float f; // Legal declaration
static const double d; // Legal declaration
};
const string Node::JOB_TYPE = "Test"; // correct definition
const float Node::f = 0.0f; // correct definition
const double Node::d = 0.0; // correct definition
int main() {
cout << Node::c << endl;
cout << Node::c << endl;
cout << Node::JOB_TYPE << endl;
cout << Node::f << endl;
}
Bir düğümde 'Düğüm' yapısını koyarsanız ve 2 dosyaya eklerseniz sorun yaşarsınız. –
Bu çok güzel bir soru - Bu pazar günü beyin hücrelerini aldım. Teşekkürler –
Kayan noktalara özgü kurallar genellikle çapraz derleyicilerle ilgili kaygılar, yani bir sistem üzerinde çalışan ancak başka bir kod üreten derleyicilerdir. Hedef sistemle eşleşen entegre tiplerle başa çıkmak için yeterince kolaydır; Başka bir sistemin kayan nokta türlerinin ayrıntılarını almak çok daha karmaşıktır. –