Я изучил auto
, и я знаю, что он выводит типы из инициализированных значений. Если я попытался написать некоторые рекомендации по использованию auto
, могу ли я приводить ниже инструкции в качестве правил?Правило большого пальца для использования auto && и const auto &
- Использование
auto &&
для всех значений (R-значений и L-значения, как это универсальный реф), которые модифицируемые, auto &&
даже для чтения только значения,- Использование
auto
везде, где это возможно (индивидуальное предпочтение для стиля кодирования).
РЕДАКТИРОВАТЬ
class Test
{
public:
Test() = default;
Test(const Test&) = default;
Test(Test&&) = default;
int i = 1;
};
Test getObj()
{
return Test();
}
Test& getObjByRef()
{
static Test tobj;
return tobj;
}
const Test getObjConst()
{
return Test();
}
int main()
{
auto && obj1 = getObj();
obj1.i = 2;
std::cout << " getObj returns: " << getObj().i << std::endl;
auto&& obj2 = getObjByRef();
obj2.i = 3;
std::cout << " getObjByRef returns: " << getObjByRef().i << std::endl;
auto && obj3 = getObjConst();
//obj3.i = 4; => //Error C3490 'i' cannot be modified because it is being accessed through a const object
return 0;
}
Таким образом, в приведенном выше примере я использовал auto &&
для всех трех функций
getObj
getObjByRef
getObjConst
И он работает должным образом. Теперь я могу заключить, что:
auto &&
может быть использован для хранения (инициализировать) любое значение, ИЛИ- Мы можем использовать
auto &&
все возможные места.
Вы видите какую-то ошибку в этом подходе?
Не используйте авто &&. Используйте либо обычный тип, либо константу. Если вы не реализуете перемещение ctor – user3104201
http://stackoverflow.com/a/13242177/2352671 – 101010
N.B. теперь это называется ссылкой на пересылку, а не универсальной ссылкой. –