Khi sử dụng tham chiếu chuyển tiếp, bạn có nên chuyển tiếp giá trị giống nhau cho nhiều hơn một hàm không? Hãy xem xét đoạn mã sau đây:Chuyển tiếp cùng một giá trị cho hai hoặc nhiều hàm
template<typename Container>
constexpr auto
front(Container&& c)
-> typename Container::value_type
{ return std::forward<Container>(c).front(); }
template<typename Container>
constexpr auto
back(Container&& c)
-> typename Container::value_type
{ return std::forward<Container>(c).back(); }
template<typename Container>
constexpr auto
get_corner(Container&& c)
{
return do_something(front(std::forward<Container(c)),
back(std::forward<Container>(c));
}
Nếu Container
là tham chiếu giá trị, hàm này hoạt động tốt. Tuy nhiên, tôi lo lắng về các tình huống mà giá trị được chuyển cho nó, bởi vì giá trị sẽ bị tổn thương khi một hoạt động di chuyển xảy ra. Nghi ngờ của tôi là: Có cách nào đúng để chuyển tiếp container trong trường hợp đó, mà không làm mất danh mục giá trị?
"bạn nên chuyển tiếp cùng một giá trị cho nhiều chức năng? Hãy xem xét đoạn mã sau đây: "Nói chung, có. Trong một số trường hợp sử dụng cụ thể, nó vô hại. Nó chỉ có thể làm tổn thương bạn, thực sự. Trong trường hợp sử dụng cụ thể của bạn, tại sao lại chuyển tiếp? – AndyG
@AndyG, di chuyển ngữ nghĩa. –