Khi tôi nhớ lại từ thời điểm đó, C++ thực sự đã xác định ký hiệu hàm variadic như bạn lưu ý. Sau đó, ngôn ngữ C phát triển nhanh chóng (trên hành trình từ K & R đến ANSI) đã giới thiệu nguyên mẫu hoặc khai báo hàm kiểu mới cũng khai báo các tham số bên trong dấu ngoặc sau tên hàm.Nhưng, với hai sự khác biệt đáng chú ý: dấu phẩy trước dấu ba chấm và nhu cầu hủy bỏ (void)
để biểu thị danh sách tham số trống (để giữ khả năng tương thích ngược của các dấu ngoặc đơn trống theo kiểu khai báo kiểu cũ).
Nhìn qua tài liệu lưu trữ của tôi, tôi tìm C++ Ngôn ngữ lập trình phiên bản gốc "in lại với sự điều chỉnh tháng 7 năm 1987" cho thấy:
luận-khai-list:
arg-declaration-list opt...
opt
arg-khai-list:
arg-khai-list,
luận-khai
luận-khai
Có không có biểu mẫu để chấp nhận dấu phẩy hiện tại tùy chọn. Lưu ý rằng danh sách khai báo arg là một dấu phẩy- được tách riêng và điều này không treo để cung cấp dấu phẩy sau danh sách và trước điều tiếp theo (khác).
Đây là cách tự nhiên nhất để viết điều này. Nếu bạn muốn dấu phẩy, bạn cần rõ ràng , ...
trong lần sản xuất đầu tiên, dưới dạng hai mã thông báo riêng biệt (có thể được phân tách bằng khoảng trắng).
Khi các nỗ lực của C đạt được tiêu chuẩn hóa phù hợp, trình biên dịch C++ bắt đầu chấp nhận các phiên bản C cũng như cho phép dễ dàng sử dụng các tệp tiêu đề C chuẩn.
Tại sao các nhà thiết kế C thêm dấu phẩy khi nó ngụ ý vai trò ngữ pháp ít hợp lý hơn của dấu ba chấm như một trình giữ chỗ tham số giả mạo? Tôi chưa bao giờ phát hiện ra.
Nguồn
2016-03-01 13:57:45
http://en.cppreference.com/w/cpp/utility/variadic – knivil
[Tham chiếu khác] (http://en.cppreference.com/w/cpp/language/variadic_arguments) mô tả tính đặc thù này. Nhìn vào cuối trang về 'printz (...)'. – callyalater
Tôi tin rằng tính năng này đã được thêm vào C++ vì * toán tử * bản chất của '...'. Điều này cho phép cú pháp nhất quán hơn trong ngôn ngữ với các tính năng được thêm vào như [tham số gói] (http://en.cppreference.com/w/cpp/language/parameter_pack). – callyalater