in

c ++ – ¿Por qué está «usando el espacio de nombres std;» considerado una mala práctica?

apple touch icon@2

Estoy de acuerdo con otros: está pidiendo conflictos de nombres, ambigüedades y luego el hecho es que es menos explícito. Si bien puedo ver el uso de using, mi preferencia personal es limitarlo. También consideraría seriamente lo que otros señalaron:

Si desea encontrar un nombre de función que pueda ser un nombre bastante común, pero solo desea encontrarlo en el std espacio de nombres (o al revés: desea cambiar todas las llamadas que son no en el espacio de nombres std, espacio de nombres X, …), entonces, ¿cómo se propone hacer esto?

Podría escribir un programa para hacerlo, pero ¿no sería mejor dedicar tiempo a trabajar en su propio proyecto en lugar de escribir un programa para mantener su proyecto?

Personalmente, en realidad no me importa el std:: prefijo. Me gusta más el look que no tenerlo. No sé si es porque es explícito y me dice «este no es mi código … estoy usando la biblioteca estándar» o si es algo más, pero creo que se ve mejor. Esto puede ser extraño dado que recientemente entré en C ++ (usé y sigo usando C y otros lenguajes durante mucho más tiempo y C es mi lenguaje favorito de todos los tiempos, justo encima del ensamblaje).

Hay otra cosa aunque algo relacionada con lo anterior y lo que otros señalan. Si bien esto puede ser una mala práctica, a veces me reservo std::name para la versión estándar de la biblioteca y el nombre para la implementación específica del programa. Sí, de hecho, esto podría morderlo y morderlo con fuerza, pero todo se reduce a que comencé este proyecto desde cero, y soy el único programador en ello. Ejemplo: sobrecargo std::string y llámalo string. Tengo adiciones útiles. Lo hice en parte debido a mi tendencia de C y Unix (+ Linux) hacia nombres en minúsculas.

Además de eso, puede tener alias de espacio de nombres. A continuación, se muestra un ejemplo de dónde es útil al que no se ha hecho referencia. Utilizo el estándar C ++ 11 y específicamente con libstdc ++. Bueno, no tiene completo std::regex apoyo. Claro, se compila, pero arroja una excepción en la línea de ser un error por parte del programador. Pero es falta de implementación.

Así que así es como lo resolví. Instale la expresión regular de Boost y la vincule. Luego, hago lo siguiente para que cuando libstdc ++ lo haya implementado por completo, solo necesito eliminar este bloque y el código sigue siendo el mismo:

namespace std
{
    using boost::regex;
    using boost::regex_error;
    using boost::regex_replace;
    using boost::regex_search;
    using boost::regex_match;
    using boost::smatch;
    namespace regex_constants = boost::regex_constants;
}

No discutiré si eso es una mala idea o no. Sin embargo, argumentaré que lo mantiene limpio durante mi proyecto y al mismo tiempo lo hace específico: Es cierto, tengo que usar Boost, pero Lo estoy usando como si libstdc ++ eventualmente lo tuviera. Sí, comenzar su propio proyecto y comenzar con un estándar (…) desde el principio es muy útil para ayudar al mantenimiento, el desarrollo y todo lo relacionado con el proyecto.

Solo para aclarar algo: en realidad no creo que sea una buena idea usar el nombre de una clase / lo que sea en el STL deliberadamente y más específicamente en lugar de. La cadena es la excepción (ignore la primera, la anterior o la segunda aquí, juego de palabras si es necesario) para mí, ya que no me gustó la idea de ‘Cadena’.

Tal como están las cosas, todavía estoy muy predispuesto a C y en contra de C ++. Ahorrando detalles, gran parte de lo que trabajo se ajusta más a C (pero fue un buen ejercicio y una buena manera de hacerme a. Aprender otro idioma y b. Tratar de no tener menos prejuicios en contra de objetos / clases / etc.que tal vez esté mejor expresado como menos de mente cerrada, menos arrogante y más tolerante). Pero que es útil es lo que algunos ya sugirieron: de hecho uso list (es bastante genérico, ¿no?), y sort (lo mismo) para nombrar dos que causarían un conflicto de nombres si tuviera que hacer using namespace std;, por lo que prefiero ser específico, tener el control y saber que si pretendo que sea el uso estándar, tendré que especificarlo. En pocas palabras: no se permite suponer.

Y en cuanto a hacer que la expresión regular de Boost sea parte de std. Hago eso para la integración futura y, nuevamente, admito plenamente que esto es un sesgo, no creo que sea tan feo como boost::regex:: .... De hecho, eso es otra cosa para mí. Hay muchas cosas en C ++ que todavía tengo que aceptar completamente en apariencia y métodos (otro ejemplo: plantillas variadas versus argumentos var [though I admit variadic templates are very very useful!]). Incluso aquellos a los que sí acepto fue difícil, y Todavía tengo problemas con ellos.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

meanjs

Tutorial de MEAN.JS

run php code in

Ejemplo de PHP – javatpoint