`Equality_comparable_with` có cần yêu cầu` common_Vference` không?


12

Các khái niệmequality_­comparable_with<T, U> được thiết kế để tuyên bố rằng đối tượng của loại hình TUcó thể so sánh tương đương với nhau, và nếu họ đang có, thì đây có ý nghĩa mong đợi. Tốt rồi.

Tuy nhiên, khái niệm này cũng đòi hỏi common_reference_t<T&, U&>phải tồn tại. Động lực chính cho common_referencevà chức năng tiếp viên của nó dường như là cho phép các trình vòng lặp proxy , để có một vị trí để thể hiện mối quan hệ giữa referencevalue_typecho các trình vòng lặp như vậy.

Điều đó thật tuyệt, nhưng ... điều đó có liên quan gì đến việc kiểm tra nếu a Tvà a Ucó thể được so sánh bằng nhau? Tại sao tiêu chuẩn yêu cầu điều đó TUcó mối quan hệ tham chiếu chung chỉ để cho phép bạn so sánh chúng bằng nhau?

Điều này tạo ra các tình huống kỳ quặc trong đó rất khó có hai loại không có mối quan hệ tham chiếu chung có thể so sánh một cách hợp lý. Ví dụ, vector<int>pmr::vector<int>logic phải được so sánh. Nhưng chúng không thể là do không có tham chiếu chung hợp lý giữa hai loại không liên quan.


@Marshall sẽ chấp thuận câu hỏi này.
Barry

Thậm chí còn assignable_fromyêu cầu common_reference...
cpplearner

@cpplearner: Điều đó ít nhất có ý nghĩa, vì sự phân công là một thuộc tính mà các tham chiếu và giá trị proxy dự kiến ​​sẽ chia sẻ.
Nicol Bolas

Câu trả lời:


4

Điều này hoàn toàn quay trở lại báo cáo Palo Alto , §3.3 và D.2.

Để các khái niệm kiểu chéo có âm thanh toán học, bạn cần xác định ý nghĩa của phép so sánh kiểu chéo. Vì equality_comparable_with, t == unói chung có nghĩa là tubằng nhau, nhưng điều đó có nghĩa gì khi hai giá trị của các loại khác nhau bằng nhau? Thiết kế nói rằng đẳng thức chéo được xác định bằng cách ánh xạ chúng sang loại (tham chiếu) chung (chuyển đổi này là bắt buộc để bảo toàn giá trị).

Trong trường hợp các tiên đề mạnh equality_comparable_withlà không mong muốn, tiêu chuẩn sử dụng khái niệm chỉ giải thích weakly-equality-comparable-withvà khái niệm đó không yêu cầu tham chiếu chung. Tuy nhiên, đó là một "sự ghê tởm ngữ nghĩa" (theo cách nói của Casey Carter) và chỉ mang tính giải thích vì lý do đó: nó cho phép có t == ut2 == unhưng t != t2(điều này thực sự cần thiết cho các trọng điểm).


2
Điều đó thật thú vị, nhưng điều đó không giải thích được tại sao giải pháp "âm thanh toán học" lại liên quan đến loại "tham chiếu chung" này thay vì ... tốt, bất cứ điều gì khác . Đó là, tại sao nó liên quan đến việc thực hiện kinh doanh chuyển đổi tham chiếu ngầm này thay vì một cái gì đó cho phép các khái niệm hợp lý về mặt toán học không thể cho phép chuyển đổi (như container<T, stuff>container<U, other_stuff>có thể so sánh nếu Tcó thể so sánh được U)? Có phải nó common_referenceđã có sẵn, hoặc có nhiều hơn thế không?
Nicol Bolas

Nó thiếu ý tưởng rằng hàm chuyển đổi thành loại phổ biến là một biểu thức.
Oliv
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.