Соответствует ли стандартная гарантия C ++ 11 «n2: int & amp;» by & quot; auto n2 = const_cast & lt; int & amp; & gt; (n); & quot ;?

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?

4

Решение

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&
5

Другие решения

auto сам по себе никогда не производит ссылочный тип.

Так n2 является int тип.

(Если бы у меня был доллар за каждый раз, когда я вижу код как for (auto s : expensive_deep_copy_container)).

5

По вопросам рекламы [email protected]