tôi nhận thấy rằng QMap::operator[](const Key & key)
có hai overloads:Tại sao toán tử QMap :: [] (const Key & key) trả về theo giá trị?
T & QMap::operator[](const Key & key)
const T QMap::operator[](const Key & key) const
Có một lý do để trở về bằng giá trị?
Và kể từ khi chúng tôi có ngữ nghĩa di chuyển:
khi trở về giá trị, chúng ta nên bao giờ quay trở lại theo giá trị const?
Lý do tại sao tôi yêu cầu là:
Hãy tưởng tượng chúng ta có:
class ExpensiveToCopy;
{
public:
int someProperty() const;
...
}
void f(const QMap<int, ExpensiveToCopy>& map)
{
int lala = map[4].someProperty(); // We need to copy the entire object
// just to look at someProperty();
}
Chỉ * một * trả về quá tải theo giá trị, giá trị còn lại trả về tham chiếu. –
@ Joachim Vâng, đó là điều mà tôi không hiểu. Không nên cả hai trở lại một tham chiếu như ví dụ std :: vector :: operator []? –
@nurettin * * * ức chế di chuyển ngữ nghĩa. – juanchopanza