Mẫu C ++ - Hướng dẫn hoàn chỉnh, Phiên bản 2 giới thiệu mẫu tối đa :
template<typename T>
T max (T a, T b)
{
// if b < a then yield a else yield b
return b < a ? a : b;
}
Và nó giải thích bằng cách sử dụng “b < a ? a : b”thay vì “a < b ? b : a”:
Lưu ý rằng mẫu max () theo [StepanovNotes] cố ý trả về bản b <a? a: bv thay vì thế a <b? b: một giá trị để đảm bảo rằng hàm hoạt động chính xác ngay cả khi hai giá trị tương đương nhưng không bằng nhau.
Làm sao để hiểu " even if the two values are equivalent but not equal."? “a < b ? b : a”dường như có kết quả tương tự với tôi
avà bvới std::addressofet. al.
a = max(a, b);(lặp đi lặp lại), bạn có thể không muốn thay thế một cách akhông cần thiết.
abằng một bản sao a).
std::addressoflà không liên quan. Trong thực tế, cho đã cho T max(T a, T b)chúng ta đã biết addressof(a) != addressof(b).
avàblà tương đương , sau đó!(a < b) && !(b < a)là sự thật, vì vậya < bvàb < acả hai đều sai, vì vậy trongb < a ? a : b,bđược trả lại, mà không phải là những gì bạn muốn ... Bạn muốna < b ? b : a.