loop instead for ejemplo based c++ c++17 auto nullptr

c++ - ejemplo - use range based for loop instead



¿Por qué funciona const auto & p{nullptr} mientras que auto*p{nullptr} no funciona en C++ 17? (3)

Esta definición funciona:

const auto &b{nullptr};

mientras esto falla

auto *b{nullptr};

He intentado compilar esto en Visual C ++, GCC y Clang. Todos se quejan "no se puede deducir tipo".

En el segundo caso, ¿no debería deducirse b tener algún tipo como std::nullptr_t ?


Es porque declara que b es un puntero y lo inicializa como un puntero nulo. Pero un puntero nulo a qué tipo de datos no dice, por lo que el compilador no puede deducir el tipo.

Si desea que b sea ​​un objeto std::nullptr_t , debe soltar el asterisco:

auto b{nullptr};


decltype(nullptr) es std::nullptr_t .

así que con

const auto &b{nullptr}; // auto is std::nullptr_t // b is a reference to a temporary (with lifetime extension)

pero nullptr NO es un puntero (incluso si es convertible a).

entonces auto *b{nullptr}; no es válido.

Puedes usar en su lugar

auto b{nullptr}; // auto is std::nullptr_t


nullptr es de tipo std::nullptr_t . Como nullptr no apunta a nada, no hay un tipo de pointee correspondiente para std::nullptr_t (no se le permite desreferenciar un nullptr ), por lo tanto

auto *b { nullptr};

solicita un tipo que no existe. Si quieres que b sea ​​de tipo nullptr_t simplemente escribe

auto b { nullptr};