Tôi biết tại sao bao gồm bảo vệ tồn tại, và rằng #pragma once
không phải là tiêu chuẩn và do đó không được hỗ trợ bởi tất cả các trình biên dịch, vvCó bất kỳ tình huống nào mà bạn không muốn bao gồm nhân viên bảo vệ không?
Câu hỏi của tôi là của một loại khác nhau:
Có bất kỳ lý do hợp lý để bao giờ không có họ ? Tôi chưa đi qua một tình huống mà về mặt lý thuyết, sẽ có bất kỳ lợi ích của việc không cung cấp bao gồm bảo vệ trong một tập tin đó là có nghĩa là để được bao gồm ở một nơi khác. Có ai có một ví dụ mà có một lợi ích thực tế của việc không có chúng?
Lý do tôi hỏi - với tôi chúng có vẻ khá thừa, vì bạn luôn sử dụng chúng và hành vi của #pragma once
cũng có thể được tự động áp dụng cho mọi thứ.
Tôi đã sử dụng đặc biệt này trong thư viện FFTW (đây là từ trước đây, có thể bây giờ nó đã thay đổi). Một số hàm được định nghĩa sao cho chúng có thể được tạo cho các kiểu cơ bản khác nhau: in, double, float, v.v., do đó bạn có thể định nghĩa bao nhiêu kiểu tùy ý và chỉ cần gộp lại tệp đó. Tuy nhiên, đây là thư viện C. Trong C++ tất nhiên chúng ta sẽ sử dụng các mẫu ... –
@the_mandrill: Trong C++, điều này thực sự được sử dụng trong một số tình huống mà các mẫu không phù hợp với vấn đề. Đặc biệt với thư viện tiền xử lý tăng để tự động tạo cùng một mã với một số đối số khác nhau, như trong 'boost :: bind' với 0, 1, 2 ... N đối số. –
@David Rodríguez: Theo như tôi hiểu nó, boost :: bind được thực hiện bằng cách cung cấp các mẫu thích hợp cho tối đa 9 đối số. Chỉnh sửa: Ok Tôi tìm thấy một nơi mà tăng nó để tránh 'trở lại x' tình hình với các chức năng với các đối số mẫu như trả về giá trị (khi loại trả về là void), nhưng tôi đã luôn luôn quản lý để giải quyết những với một chuyên ngành mẫu cụ thể cho loại 'void'. Họ đi tuyến đường mà không bao gồm bảo vệ, nhưng nó không phải là cần thiết để xác định lại một vĩ mô 'return' để giải quyết vấn đề này. – Mephane