std :: remove_Vference_t <std :: remove_cv_t <T >> thứ tự có quan trọng không?


8

Có vấn đề theo thứ tự nào sau đây được áp dụng?

std::remove_reference_t<std::remove_cv_t<T>>

hoặc là

std::remove_cv_t<std::remove_reference_t<T>>

Trong kịch bản nào, nếu có, thứ tự có vấn đề?


2
Hãy thử áp dụng nó cho const int&. Bạn nên nhận const inttrong trường hợp đầu tiên và inttrong trường hợp thứ hai.
Evg

Điều này có trả lời câu hỏi của bạn không? std :: remove_const với các tham chiếu const
Evg

@Evg Tôi nghĩ nó có phần nào, bạn đang nói tôi nên xóa tham chiếu trước, vì tham chiếu có thể là const?
darune

Exaclty. Nói một cách lỏng lẻo, tài liệu tham khảo không thể là không " const".
Evg

Câu trả lời:


7

Có những trường hợp khi hai đặc điểm loại này tạo ra kết quả khác nhau. Ví dụ, hãy xem xét T = const int&.

  1. std::remove_cv_tsẽ loại bỏ vòng loại cv cấp cao nhất, biến const int&thành const int&, vì không có vòng loại cv cấp cao nhất. std::remove_reference_tsau đó sẽ trở lại const int.

  2. Trong trường hợp thứ hai, std::remove_reference_tsẽ trở lại const int, và std::remove_cv_tsẽ biến đổi nó thành int.

Bản demo đơn giản

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.