C ++ auto в static_cast - PullRequest
       12

C ++ auto в static_cast

0 голосов
/ 05 июня 2019

Ключевое слово auto может использоваться во многих контекстах и ​​комбинироваться с другими языковыми элементами, как в const auto& или auto&&. Однако его нельзя использовать в операциях приведения. Рассмотрим следующий пример (который не компилируется):

template <class T> void foo(T&& t) {}

int main() {
    int i = 0;
    foo(static_cast<const auto&>(i)); // This could call foo(const int&)
}

Приведение, очевидно, будет работать с int вместо auto, но возможность использовать auto в приведениях будет полезна в общем коде, например:

  • Вы можете использовать const auto& (как указано выше) для явного вызова перегруженной функции с константным значением ref.
  • Аналогично, вы можете использовать static_cast<auto&&> как менее подробную версию std::forward<decltype(x)>(x).
  • Подумав немного дальше, static_cast<auto>(x) или что-то вроде auto(x) может быть способом явного копирования объекта.

(Обратите внимание, что явные типы вместо auto могут использоваться во всех этих сценариях.)

Если честно, я интуитивно ожидал, что этот синтаксис сработает (потому что он отражает способ использования auto в объявлениях), но, к моему мягкому удивлению, это не сработало. Поскольку это такой очевидный синтаксис, мне интересно, есть ли конкретные причины, по которым он запрещен? Или это просто случай, когда никто не рассматривает / не предлагает его как особенность?

...