Ngôn ngữ chức năng có khớp mẫu (đôi khi?) Có khả năng bỏ qua một số giá trị bị ràng buộc, nhưng với ràng buộc có cấu trúc C++ 17 dường như không có cách nào để làm điều đó (std::ignore with structured bindings?). Lời khuyên là sử dụng một tên giả, nhưng sau đó chúng tôi sẽ nhận được cảnh báo về các biến không sử dụng.ràng buộc có cấu trúc với [[might_unused]]
Với người đứng đầu mới nhất của cả hai kêu vang và gcc, điều này là điều mong đợi, đó là tốt đẹp và hữu ích,
[[maybe_unused]] auto x =4 ; // fine, no warning
[[maybe_unused]] auto [a,dummyb,dummyc] = std::tuple<int,int,float>(1,1,1.0f);
nhưng tôi cũng sẽ có hy vọng điều này sẽ làm việc:
auto [g,[[maybe_unused]]dummyh,[[maybe_unused]]dymmyi] =
std::tuple<int,int,float>(1,1,1.0f);
Có một lý do cụ thể nào không thể sử dụng ở đây là attributes? (trong tiêu chuẩn cũng như về mặt kỹ thuật). Cả gcc hoặc clang đều không chấp nhận điều này.
Chỉnh sửa, thu thập trạng thái hỗ trợ: (nhờ godbolt/compiler explorer). Nó hoạt động như mong đợi trong (có thể là trước đó cũng):
- gcc 8,0 thân cây (g ++ 8.0.0 20.171.015 thử nghiệm)
- kêu vang 4.0.0
- icc 18 (không kiểm tra, theo specs)
MSVC 17.3.5 (và GUI của Visual Studio), cho phép thuộc tính nhưng không hoạt động với các ràng buộc có cấu trúc. bug report
Tôi tưởng tượng rằng khả năng chặn phân tách lồng nhau có thể là một mối quan tâm. –
Hmm. Ok ... '[g, [[might_unused]]] = foo()' .. Tôi càng nghĩ về nó, tôi càng tốt với việc đặt thuộc tính duy nhất đó ở bên ngoài :-) –
vấn đề là bạn sẽ không biết biến nào không được sử dụng mặc dù nếu nó ở bên ngoài – serine