Tôi không hiểu tại sao C++ chỉ cho phép các kiểu tách rời và enum (enum là một kiểu tách rời) được xác định trong một khai báo lớp. Trong khi tất cả các loại khác, bao gồm các loại điểm phao (tức là double và float), phải được xác định bên ngoài khai báo lớp. Rõ ràng phải là một lý do cho điều này, nhưng tôi không thể tìm ra.Tại sao chỉ có thể khởi tạo kiểu tích phân hoặc enum trong một lớp C++?
Mã dụ:
#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;
}
Bạn sẽ chỉ gặp sự cố nếu bạn đặt cấu trúc 'Node' trong tiêu đề và bạn đưa nó vào 2 tệp. –
Đây là một câu hỏi rất hay - Đã có các tế bào não của tôi ratting vào chủ nhật này. Cảm ơn –
Các quy tắc đặc biệt cho dấu phẩy động thường là do những lo ngại về trình biên dịch chéo, tức là các trình biên dịch chạy trên một hệ thống nhưng tạo mã cho một hệ thống khác. Thật dễ dàng để đối phó với các loại tích phân phù hợp với hệ thống đích; nhận được các chi tiết về các loại dấu phẩy động của một hệ thống khác phức tạp hơn nhiều. –