Мне было интересно, в каких ситуациях мне все еще нужно использовать ссылки const в параметрах с С++ 11. Я не совсем понимаю семантику перемещения, но я думаю, что это законный вопрос. Этот вопрос предназначен только для ситуаций, когда ссылка на константу заменяет копию, когда требуется только "прочитать" значение (например, использование функций-членов-констант).
Обычно я бы написал функцию (member) следующим образом:
#include <vector>
template<class T>
class Vector {
std::vector<T> _impl;
public:
void add(const T& value) {
_impl.push_back(value);
}
};
Но я думаю, что с уверенностью предположить, что компилятор будет оптимизировать его с помощью семантики перемещения, если я напишу его так, а class T
of the course реализует конструктор перемещения:
#include <vector>
template<class T>
class Vector {
std::vector<T> _impl;
public:
void add(T value) {
_impl.push_back(value);
}
};
Я прав? Если да, можно ли предположить, что он может использоваться в любой ситуации? Если нет, я хотел бы знать, что. Это значительно облегчило бы жизнь, так как мне не пришлось бы применять специализацию класса для фундаментальных типов, например, он выглядит намного чище.