Trình biên dịch C++ có thể áp dụng RVO cho các chức năng ảo không?Chức năng ảo có thể là ứng cử viên cho RVO (tối ưu hóa giá trị trả về) không?
Trong trường hợp này:
class AbstractReader
{
//...
public:
virtual std::vector<float> getFloatVector() = 0;
//...
}
class XmlReader : public AbstractReader
{
//...
public:
virtual std::vector<float> getFloatVector()
{
std::vector<float> result;
//Do some parsing here...
return result;
}
//...
}
class BinaryReader : public AbstractReader
{
//...
public:
virtual std::vector<float> getFloatVector()
{
std::vector<float> result;
//Do some decoding here...
return result;
}
//...
}
RVO có thể áp dụng đối với return result;
dòng? Tôi đoán là không.
Sau đó, là std::move(result)
cách để trả lại các thùng chứa lớn trong trường hợp đó?
Cảm ơn
Bạn có thể làm rõ câu hỏi của mình không? Bạn có thường trả về các chức năng ảo không? – juanchopanza
@juanchopanza: Tôi nghĩ câu hỏi là liệu RVO có hoạt động _within_ một chức năng ảo hay không, tức là đối với bất kỳ chức năng ảo nào có thể trả lại, không cho dù RVO hoạt động khi trả về một hàm ảo. (Và tôi không thấy lý do tại sao không nên làm việc theo nguyên tắc) – Damon
@Damon Tôi nghĩ tương tự, nhưng tốt hơn hãy để OP giải thích những gì họ thực sự muốn hỏi. – juanchopanza