Tôi đã biên soạn một chương trình C++ trong Cygwin bằng cách sử dụng g ++ và tôi đã có một lớp có hàm tạo không có đối số. Tôi đã có dòng:Không có dấu ngoặc đơn trên một hàm tạo không có đối số một tiêu chuẩn ngôn ngữ?
MyClass myObj();
myObj.function1();
Và khi cố gắng để biên dịch nó, tôi nhận được tin nhắn:
lỗi: yêu cầu cho thành viên 'Function1' trong 'myObj', mà là loại phi lớp 'MyClass()() '
Sau một ít nghiên cứu, tôi thấy rằng bản sửa lỗi là thay đổi dòng đầu tiên thành MyClass myObj;
Tôi có thể thề là tôi đã thực hiện khai báo hàm dựng rỗng với dấu ngoặc đơn trong C++ trước đây. Đây có lẽ là một hạn chế của trình biên dịch tôi đang sử dụng hay không các tiêu chuẩn ngôn ngữ thực sự nói không sử dụng dấu ngoặc đơn cho một constructor mà không có đối số?
Để mở rộng - đó chỉ là vấn đề trong một số ngữ cảnh nhất định. Viết "ném myexceptionclass();", ví dụ, và không có nhầm lẫn. Ngôn ngữ không rõ ràng trong bối cảnh Petes, nhưng các quy tắc định hướng (lý do ngôn ngữ nghiêm chỉnh không thực sự mơ hồ) chọn một giải thích. Tất nhiên các quy tắc định hướng có nghĩa là ngôn ngữ không thực sự mơ hồ - nhưng các chuyên gia phân tích vẫn nói điều đó, vì vậy tôi cũng được phép! Các quy tắc định hướng phổ biến nhất trong nhiều ngôn ngữ là ưu tiên toán tử và khả năng kết hợp - C và C++ có nhiều mơ hồ hơn, và kết quả là có một số vấn đề lạ. – Steve314