Pointer toán tử quan hệ không xác định một trật tự tổng (§ 5.9 of the C++11 standard):`std :: less` hoạt động như thế nào?
Nếu hai con trỏ
p
vàq
của điểm cùng loại với các đối tượng khác nhau mà không phải là thành viên của cùng một đối tượng hoặc các yếu tố của mảng tương tự hoặc với các chức năng khác nhau hoặc nếu chỉ một trong số chúng là null, kết quả củap<q
,p>q
,p<=q
vàp>=q
không được chỉ định.
std::less tài liệu nói:
Các đặc tả từng phần của
std::less
cho bất kỳ loại con trỏ mang lại một trật tự tổng, thậm chí nếu được xây dựng trongoperator<
không.
Làm thế nào để tổng số đơn đặt hàng này từ một phần đơn hàng?
Tôi không thể trả lời cho câu hỏi này bằng cách nhìn vào /usr/include/c++/4.9/bits/stl_function.h
cho struct less
định nghĩa:
template<typename _Tp = void>
struct less;
template<typename _Tp>
struct less : public binary_function<_Tp, _Tp, bool>
{
bool
operator()(const _Tp& __x, const _Tp& __y) const
{ return __x < __y; }
};
template<>
struct less<void>
{
template <typename _Tp, typename _Up>
auto
operator()(_Tp&& __t, _Up&& __u) const
noexcept(noexcept(std::forward<_Tp>(__t) < std::forward<_Up>(__u)))
-> decltype(std::forward<_Tp>(__t) < std::forward<_Up>(__u))
{ return std::forward<_Tp>(__t) < std::forward<_Up>(__u); }
typedef __is_transparent is_transparent;
};
Cảm ơn bạn, câu trả lời của bạn là hoàn hảo. Tuy nhiên, bạn có biết bất kỳ việc thực thi 'toán tử <' nào không cung cấp tổng số thứ tự không? Cách triển khai 'std :: less' mang lại tổng số thứ tự từ nó như thế nào? – rom1v
@ rom1v Tôi không biết về sự tồn tại của việc triển khai như vậy.Tôi khá chắc chắn nó tồn tại, xem xét cẩn thận các ủy ban tiêu chuẩn quyết định những gì đi như một yêu cầu và những gì đi như * hành vi không xác định *. – Shoe
Tôi không chắc nó vẫn tồn tại. Phần lớn điều này đến từ những ngày gần và xa. – Nevin