Nhìn vào tiêu chuẩn C++ 11. Tôi có thể thấy chuyên môn của std::tuple_size
và std::tuple_element
được cung cấp cho volatile
và const volatile
bộ dữ liệu.dễ bay hơi và const dễ bay hơi std :: tuple và std :: get
template <size_t I, class T> class tuple_element<I, volatile T>;
template <size_t I, class T> class tuple_element<I, const volatile T>;
template <class T> class tuple_size<volatile T>;
template <class T> class tuple_size<const volatile T>;
Nhưng std::get
làm không phục vụ chuyên môn cho volatile
hay const volatile
tuple.
Tôi đã thử các mã sau đây trên GCC.4.8.1
volatile std::tuple<int, int> a(1, 1);
std::cout << "a<0>=" << std::get<0>(a) << "\n";
tôi nhận được lỗi: no matching function for call to 'get(volatile std::tuple<int, int>&)'
Vì vậy, nếu tôi hiểu rằng tôi có thể tạo ra (const) tuples dễ bay hơi nhưng tôi không thể truy cập vào các yếu tố của họ .
Đây có phải là hành vi dự kiến hoặc giám sát không?
Cảm ơn rất nhiều.
Không hoạt động trên GCC 4.9, fwiw. – Barry
'const volatile' đánh tôi như một sự kết hợp kì lạ. Bất cứ ai biết sử dụng hợp pháp của nó? – Cameron
@Cameron đăng ký phần cứng không nên được ghi vào nhưng có thể được thay đổi theo bạn, ví dụ. –