Me preguntaba por qué hay dos formas de especificar un puntero nulo. He estado revisando el link, pero no obtuve una comprensión clara de su uso.nullptr vs __nullptr
¿Alguien puede dar un buen ejemplo de cuándo usar qué?
Me preguntaba por qué hay dos formas de especificar un puntero nulo. He estado revisando el link, pero no obtuve una comprensión clara de su uso.nullptr vs __nullptr
¿Alguien puede dar un buen ejemplo de cuándo usar qué?
El lenguaje C++/CLI ya tenía una palabra clave nullptr
desde 2005. Eso causó un problema cuando C++ 11 adoptó la palabra clave nullptr para C++. Ahora hay dos, uno para el código administrado y otro para el código nativo. El compilador C++/CLI puede compilar ambos. Por lo tanto, debe usar __nullptr cuando se refiere al puntero nulo nativo, nullptr cuando se refiere al puntero nulo administrado.
Esto solo es relevante cuando compila con/clr en efecto. Escriba el código C++/CLI en otras palabras. Simplemente use plain nullptr en código C++.
Si leo correctamente, debe usar nullptr
para punteros administrados y __nullptr
para el puntero no administrado. Sin embargo, dado que nullptr
se puede usar tanto para un puntero administrado como no administrado, personalmente no veo una razón para usar __nullptr
.
Pero, si está compilando con el modificador/clr, ¿cómo puede saber el compilador si está utilizando C++ 11 'nullptr' o C++/CLI' nullptr'? No puede, que es la razón por la que * debes * usar '__nullptr' cuando te refieres a la versión de C++ 11 cuando estás compilando con el modificador/clr. –
El motivo para usar __nullptr es que si usa nullptr, ** nunca ** podrá activar C++/CLI y utilizar .NET. Lo cual es una gran desventaja en términos de usar código heredado en el futuro. – user3690202
Creo que el poco sobre/clr es probablemente la parte más importante de esta respuesta. Si no está interesado en conectar su código C++ a .NET Framework, entonces siempre debe usar 'nullptr'. –
Siendo realmente pedante, ya era un problema (aunque raramente relevante antes) con portar el código C++ a C++/CLI antes de que existiera C++ 11. – Deduplicator