const int n = 0;
auto& n1 = const_cast<int&>(n);
auto n2 = const_cast<int&>(n);
Гарантирует ли стандарт C ++ 11 n2 is int&
от auto n2 = const_cast<int&>(n);
?
Должен ли я использовать auto& n1 = const_cast<int&>(n);
вместо auto n2 = const_cast<int&>(n);
?
Являются ли эти два способа полностью эквивалентными друг другу в соответствии со стандартом C ++ 11?
auto
использует те же правила, что и для обычного вывода аргумента шаблона функции, который никогда не выводит ссылку.
C ++ 14 decltype(auto)
, с другой стороны, можно вывести ссылку здесь. Как и C ++ 11 auto&&
,
const int n = 0;
auto a = const_cast<int&>(n); // a is int
decltype(auto) b = const_cast<int&>(n); // b is int&
auto&& c = const_cast<int&>(n); // c is int&
auto
сам по себе никогда не производит ссылочный тип.
Так n2
является int
тип.
(Если бы у меня был доллар за каждый раз, когда я вижу код как for (auto s : expensive_deep_copy_container)
).