Năm trước, tôi tin rằng C hoàn toàn thuần khiết so với C++ vì trình biên dịch không thể tạo ra bất kỳ mã nào mà bạn không thể dự đoán được. Bây giờ tôi tin rằng các ví dụ truy cập bao gồm các rào cản từ khóa và bộ nhớ volatile
(trong lập trình đa xử lý hoặc trình điều khiển thiết bị cho các thiết bị phần cứng được ánh xạ bộ nhớ, nơi ngôn ngữ lắp ráp đơn giản thậm chí còn thuần khiết hơn các trình tối ưu hóa của trình biên dịch C).Cách vô tình tạo đối tượng tạm thời trong C++?
Hiện tại tôi đang cố gắng liệt kê những điều không thể đoán trước mà trình biên dịch C++ có thể thực hiện. Khiếu nại chính dính trong tâm trí của tôi về C++ là trình biên dịch sẽ ngầm khởi tạo các đối tượng tạm thời, nhưng tôi tin rằng những trường hợp này có thể được mong đợi. Các trường hợp tôi đang nghĩ đến việc là:
- khi một lớp định nghĩa một constructor sao chép cho một loại khác hơn là chính nó, mà không sử dụng các từ khóa
explicit
- khi một lớp định nghĩa một nhà điều hành chuyển đổi quá tải:
operator()
- khi một chức năng chấp nhận một đối tượng theo giá trị thay vì bằng cách tham khảo
- khi một hàm trả về một đối tượng bằng giá trị thay vì bằng cách tham khảo
có phải lại bất kỳ người nào khác?
+1: thú vị khi nói đến các hệ thống nhúng. – jldupont
Đây là tất cả được xác định trong tiêu chuẩn và do đó có thể được dự đoán - những người không thể dự đoán là hành vi không xác định – Mark
Trong C bạn có chuyển đổi tiềm ẩn (phôi), vì vậy tôi sẽ không nói đó là "thuần túy". – Manuel