std:: cadena vs cadena en c++ [duplicado]
Posibles Duplicados:
¿Por qué 'usar espacio de nombres std;' se considera una mala práctica en C++?
Usando el Espacio de nombres std
He estado rondando por un montón de foros diferentes y parece que veo esto aparecer cada vez y otra vez. Es una pregunta muy principiante.
Normalmente defino un programa con
#include<string>
using namespace std;
string x;
Veo un montón de ejemplos de código por ahí que definen una cadena como
std::string.
¿Cuál es el propósito de esto? ¿es una buena práctica o tiene alguna funcionalidad?
5 answers
Como ya se indicó en la otra respuesta, usar std::
es necesario a menos que importe todo el espacio de nombres std
o std::string
(ver más abajo).
En mi opinión es mejor usar std::string
en lugar de string
ya que muestra explícitamente que es una std::string
y no alguna otra implementación de cadena.
Si prefieres escribir solo string
, te sugiero que uses using std::string;
en lugar de using namespace std;
para importar solo las cosas en el espacio de nombres global que realmente necesitas.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-31 11:40:01
El nombre completo de string
es std::string
porque reside en namespace std
, el espacio de nombres en el que residen todas las funciones, clases y objetos de la biblioteca estándar de C++.
En su código, ha agregado explícitamente la línea using namespace std;
, que le permite usar cualquier cosa del espacio de nombres estándar sin usar el prefijo std::
. Por lo tanto, puede referirse a std::string
(el nombre real del tipo de cadena) usando la abreviatura string
ya que el compilador sabe que debe buscarlo en namespace std
.
No hay funcionalidad diferencia entre string
y std::string
porque son del mismo tipo. Dicho esto, hay momentos en los que preferirías std::string
sobre string
. Por ejemplo, en un archivo de encabezado, generalmente no se considera una buena idea poner la línea using namespace std;
(o usar cualquier espacio de nombres, para el caso) porque puede causar que los nombres en los archivos que incluyen ese encabezado se vuelvan ambiguos. En esta configuración, simplemente #include <string>
en el encabezado, luego use std::string
para referirse al tipo de cadena. Del mismo modo, si alguna vez hubo alguna ambigüedad entre std::string
y algún otro tipo string
, usar el nombre std::string
eliminaría la ambigüedad.
Si se incluye o no la línea using namespace std;
en absoluto es un tema algo controvertido y muchos programadores están fuertemente a favor o en contra. Sugiero usar cualquier cosa con la que te sientas cómodo y asegurarte de adoptar cualquier convención de codificación que se use al trabajar en un proyecto grande.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-31 11:41:27
Como ssteinberg dijo que es lo mismo. Pero solo sintácticamente.
Desde mi experiencia, es más útil usar el nombre completo
std::string
Donde sea que lo necesite, o agregue un
using std::string;
Al principio de su archivo fuente.
La ventaja es que de esta manera las dependencias de su archivo fuente son más observables. Si añade un
using namespace std;
Significa que su código puede depender de cualquier cosa dentro de ese espacio de nombres.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:34:21
Si no son using
el namespace std
, entonces tienen que especificar a qué cadena de espacio de nombres pertenecen usando std::string
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-31 11:40:13
Si tienes using namespace std;
antes de tu código es lo mismo.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-31 11:38:32